【问题标题】:How to add a subproject working copy to a workspace in Xcode 5?如何在 Xcode 5 中将子项目工作副本添加到工作区?
【发布时间】:2013-11-29 23:47:31
【问题描述】:
Xcode 5 应该改进对来自不同存储库的子项目的管理。根据文档,将子项目拖入工作区会询问是否应将新项目包含在工作区中并自动与主项目签出。
但是,当我这样做并接受此消息时,子项目似乎被添加为主项目的一部分,而不是来自不同存储库的单独独立项目(使用 git 子模块)
使用git status,我为添加到工作区的新项目获得了一堆“未跟踪文件”。当我添加要直接添加到主项目的新文件时,这正是我所期望的。但显然我不想将子项目的文件添加到主存储库中。
这就是我的工作:
- 在 Finder 中,将整个子项目拖入
MainProject/Libraries。
- 将
MainProject/Libraries/SubProject/SubProject.xcodeproj 拖入工作区。
- 当询问我是否接受“共享工作副本”时。
-
使用git status 我明白了
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: Libraries/SubProject/SubProject.xcodeproj/project.pbxproj
# new file: Libraries/SubProject/SubProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
# new file: Libraries/SubProject/SubProject.xcodeproj/project.xcworkspace/xcshareddata/SubProject.xccheckout
# new file: Libraries/SubProject/SubProject.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Libraries/SubProject/.gitignore
# Libraries/SubProject/SubProject
# Libraries/SubProject/SubProjectTest
# Libraries/SubProject/DemoApp
【问题讨论】:
标签:
xcode
git
xcode5
git-submodules
【解决方案1】:
如果您查看工作区的 xccheckout 文件 (workspace/xcshareddata/MyProject.xccheckout),您会看到如下内容:
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>291D49C7-ABC9-4A7B-95B7-A7988B531D68</key>
<string>https://github.com/whatever/whatever.git</string>
<key>77C26974-A34E-46C6-BFCB-6753E157F937</key>
<string>file:///Users/me/Dropbox/MyProject/</string>
</dict>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>291D49C7-ABC9-4A7B-95B7-A7988B531D68</key>
<string>../../whatever</string>
<key>77C26974-A34E-46C6-BFCB-6753E157F937</key>
<string>../..</string>
</dict>
因此,Xcode 似乎记录了子项目相对于工作空间的位置,以及它的原点。在这种情况下,工作区起源在 Dropbox 上,而“whatever”子项目是从 GitHub 克隆的。 'whatever' 项目在与主项目文件夹相同的文件夹层次结构级别检出 - 它不是子文件夹。
即
|-- Projects
|------ whatever (cloned from GitHub origin)
|------ MyProject (cloned from Dropbox origin)
|---------- MyProject.xcworkspace
|---------- MyProject.xcproj
|---------- ...
Xcode 还记下工作副本的修订版本,这样当下一个人过来签出/复制您的项目并且缺少“任何”项目时,Xcode 可以为他们签出(并坚持下去)在同一个相对目录中)。
您会注意到 git 子模块不会加入其中。这是 Xcode 的一项功能。它允许您拥有特定项目的一个工作副本,但可以将其作为子项目添加到多个其他项目中(这就是它说“共享工作副本”的原因)。所以在上面的例子中,我可以有另一个项目(MyOtherProject),它引用“whatever”的相同工作副本。您还可以混合搭配 VCS 系统(假设 Xcode 支持所有这些系统)。
如果像您的情况一样,您已将子项目克隆到主项目的层次结构中,那么您实际上得到了一个子模块。