Apple在Xcode 5中引入了与项目相关的新文件类型:“ xccheckout”。
该文件位于“ .xcodeproj / project.xcworkspace / xcshareddata /”目录中,似乎与项目的版本控制系统有关。
此处是一个示例文件:http : //pastebin.com/5EP63iRa
我想这种类型的文件在VCS下应该被忽略,但是我不确定。
所以这是问题:
- 应该忽略“ xccheckout”吗?
- 目的是什么?
Apple在Xcode 5中引入了与项目相关的新文件类型:“ xccheckout”。
该文件位于“ .xcodeproj / project.xcworkspace / xcshareddata /”目录中,似乎与项目的版本控制系统有关。
此处是一个示例文件:http : //pastebin.com/5EP63iRa
我想这种类型的文件在VCS下应该被忽略,但是我不确定。
所以这是问题:
Answers:
您应该检入Xcode 5 .xccheckout
文件;通常,xcshareddata
应提交文件。
一个.xccheckout
文件包含哪些存储库工作空间中使用的元数据。对于单个存储库中的单个项目,并没有太大的区别。但是,如果您使用的工作区具有来自不同存储库的多个项目.xccheckout
,则工作区中存在文件可让Xcode知道组成工作区的所有组件是什么以及从何处获取它们。
.xcuserdata
因此应将其包括在内。
.xccheckout
文件都会在Xcode 6 beta上引起一些疯狂的问题,因此我决定将它们从VCS中删除。似乎与某些缓存错误有关,我相信Xcode每次都能从VCS自动重新生成它们。
该*.xccheckout
文件包含VCS元数据,因此不应将其签入VCS。
另一方面:检入此文件可能不会造成合并困难或其他问题。
如果您想忽略此文件(建议使用此文件),则应将此行添加到项目的中.gitignore
:
*.xccheckout
Abizern的解决方案不适用于工作空间内的项目。因为,当您使用工作空间时,*.xccheckout
文件的路径将是:<workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout
。实际上,它忽略了比您想要的更多的东西。
编辑: 存在此文件用于管理Xcode对项目中可能的许多VCS系统的了解,请参见Chris Hanson的答案。对于超过99%的项目,.xccheckout文件是配置过大的问题。
.gitignore
它为开发人员提供的GitHub标准不应该指定*.xccheckout
这取决于。该文件包含对您正在使用的远程存储库的引用。如果您使用的是集中式VCS(例如Perforce或Subversion),则每个人的远程存储库都相同,因此您可以并且应该将文件检入。
如果您使用的是诸如Mercurial或git之类的分布式VCS,但就好像它是CVCS一样使用(换句话说,每个人都从共享存储库直接克隆到其计算机上的个人工作区),那么您仍然可能要检查它在。
但是,如果您使用的是DVCS,并且每个人都有自己的远程克隆,例如,在标准用法模式下使用GitHub,则您不想检入此文件。如果您这样做,则Pull Requests将要求您的存储库设置可以复制到其他人的xccheckout文件中,但是您的存储库设置会与其他人的存储库设置不同,因为您都在使用不同的远程存储库。
是的,该Project.xccheckout
文件应提交到您的存储库。Xcode使用此文件告诉其他人打开工作区的工作区使用的源代码控制存储库的完整列表以及工作副本相对于工作区的位置,无论这些存储库是Git,SVN还是两者。
当您打开工作区时,Xcode使用该Project.xccheckout
文件通知用户还有其他存储库构成工作区的一部分,并询问应检出哪些存储库。当签出其他存储库时,Xcode将工作副本放置在与Project.xccheckout
生成文件时相同的相对于工作区的文件夹结构中。
正如克里斯·汉森(Chris Hanson)所说,对于一个单一存储库,一个项目的工作空间可能并不重要,但是对于更复杂的事务,这确实非常方便。
您可以在WWDC 2013会话视频了解Xcode中的源代码控制中找到有关此内容的更多信息;相关部分大约在15分钟开始。
这就是我在Xcode的.gitignore中所拥有的。
#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/
它使任何与项目在存储库中寻找我的方式的本地状态有关的内容。
xccheckout文件位于此处,因此默认情况下不会在我的系统上对其进行跟踪。
Xcode已经变得更好,并且将需要共享的内容和需要保留的内容分开了。例如; 这些行将忽略默认的构建方案,这很好,因为您可以将特定的构建方案标记为共享,并将它们放置在不被忽略的目录中。
断点将被忽略,但是您可以将特定的断点标记为在项目之间共享,并且它们也将放置在不可忽略的目录中。