XCS中的*.xccheckout文件应该在VCS下被忽略吗?

Art*_*mov 157 git version-control xcode xcode5

Apple在Xcode 5中引入了一个与项目相关的新文件类型:"xccheckout".

该文件位于".xcodeproj/project.xcworkspace/xcshareddata /"目录中,似乎它与项目的版本控制系统有关.

这里有一个示例文件:http://pastebin.com/5EP63iRa

我想在VCS下应该忽略这种类型的文件,但我不确定.

所以这里是问题:

  1. 应该忽略"xccheckout"吗?
  2. 它的目的是什么?

Chr*_*son 109

应该签入Xcode 5 .xccheckout文件; 通常,xcshareddata应该提交文件.

一个.xccheckout文件包含哪些存储库工作空间中使用的元数据.对于单个存储库中的单个项目没有太大区别.但是,如果您正在使用具有来自不同存储库的多个项目的工作空间,则工作空间中存在的.xccheckout文件允许Xcode知道构成工作空间的所有组件是什么以及从何处获取它们.

  • 看起来xccheckout包含特定于每个开发人员机器的键和名称......一旦我运行xcode,它就会更改文件中的一些键,并将名为IDESourceControlWCCName的内容从<string> OurCompanyAPI </ string>更改为<string > our_company_api/string> - 后者是我克隆回购时使用的名称.如果这个文件应该被共享,那么Apple的工作做得很差. (72认同)
  • 无论Apple最初的目的是什么,`.xccheckout`文件都会在Xcode 6 beta上引起一些疯狂的问题,我决定将它们从VCS中删除.似乎与某些缓存错误有关,我相信Xcode每次都可以自动从VCS重新生成它们. (9认同)
  • 如果它不是要共享的,Apple会将它存储在`.xcuserdata`中,因此它应该被包含在内. (8认同)
  • 当我们签入此文件时,我的所有同事都会得到一个不同的IDESourceControlProjectIdentifier ...所以我们的.xccheckout会在每次提交时被修改.-_- (7认同)
  • 正如我在回答中所说,xccheckout文件包含工作空间中使用的所有存储库的信息.就是这种情况**无论他们使用什么SCM系统** - 这样的工作空间可以是svn或git,其项目可以是svn和git存储库的混合. (4认同)

Ber*_*rik 63

*.xccheckout文件包含VCS元数据,因此不应检入VCS.

另一方面:签入此文件可能不会产生合并困难或其他问题.

如果你想忽略这个文件(我推荐)你应该将这一行添加到你的项目中.gitignore:

*.xccheckout
Run Code Online (Sandbox Code Playgroud)

Abizern解决方案不适用于工作区内的项目.因为,当您使用工作区时,*.xccheckout文件的路径将是:<workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout.它实际上忽略了你想要的更多.

编辑: 此文件用于管理Xcode对项目中可能有多个VCS系统的了解,请参阅Chris Hanson的回答.对于> 99%的项目,.xccheckout文件是配置过度杀伤.

  • 这个答案是不正确的,它提供给开发人员的GitHub的标准`.gitignore`应该**不要指定`*.xccheckout` (6认同)
  • 自从我的回购中引入此文件后,我最近开始将其从我的所有回购中删除.这个事情是**一直在创建合并冲突**,主要是在包含我自己的框架作为子模块的项目中.然后我从这个文件中得不到任何东西,因为我使用git进行子模块管理.好的尝试,Apple,谢谢,但不,谢谢. (2认同)

小智 38

这取决于.该文件包含对您正在使用的远程存储库的引用.如果您使用的是集中式VCS,例如Perforce或Subversion,那么每个人的远程存储库都是相同的,因此您可以并且应该检查该文件.

如果您使用的是分布式VCS,例如Mercurial或git,但使用它就好像它是CVCS(换句话说,每个人从共享存储库直接克隆到他们计算机上的个人工作空间),那么您仍然可能想要检查它在.

但是,如果您使用DVCS并且每个人都拥有自己的远程克隆,例如在其标准使用模式中使用GitHub,则不要检查此文件.如果您这样做,那么您的Pull请求将要求您的存储库设置要复制到其他人的xccheckout文件中,但您的存储库设置将与其他人不同,因为您使用的是不同的远程存储库.


Cal*_*ion 20

是的,该Project.xccheckout文件应该提交到您的存储库.Xcode使用此文件告诉打开工作空间的其他人工作空间使用的源控制存储库的完整列表以及工作副本相对于工作空间的位置,无论这些存储库是Git,SVN还是两者.

当您打开工作区时,Xcode使用该Project.xccheckout文件通知用户有其他存储库构成工作区的一部分,并询问应该检出哪些存储库.检查其他存储库时,Xcode将工作副本放在与Project.xccheckout生成文件时相同的工作空间相关文件夹结构中.

正如Chris Hanson所说,对于单一存储库,单项目工作区而言,这可能并不重要,但对于更复杂的事务,它确实非常方便.

您可以在WWDC 2013会话视频中了解更多相关信息,了解Xcode中的源代码控制 ; 相关部分约15分钟开始.