Xcode 5应该改进来自不同存储库的子项目的管理。根据文档,将子项目拖动到工作空间将询问新项目是否应包含在工作空间中并自动检出主项目。
但是,当我这样做并接受此消息时,子项目似乎被添加为主项目的一部分,而不是来自不同存储库的单独独立项目(使用git子模块)
使用git status
我为我添加到工作区的新项目获得了一堆“未跟踪文件”。当我添加我打算直接添加到主项目的新文件时,这正是我所期望的。但显然我不想将子项目的文件添加到主存储库。
这就是我的所作所为:
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
答案 0 :(得分:0)
如果查看工作区的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上,并且从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支持所有这些系统)。
如果您已将子项目克隆到主项目的层次结构中,则有效地获得子模块。