在VCS下是否应忽略Xcode5中的* .xccheckout文件?


157

Apple在Xcode 5中引入了与项目相关的新文件类型:“ xccheckout”。

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

此处是一个示例文件:http : //pastebin.com/5EP63iRa

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

所以这是问题:

  1. 应该忽略“ xccheckout”吗?
  2. 目的是什么?

这个问题往往很相关。因此,我希望它在语法和语法上更加正确。如果您是说英语的母语人士,或者您精通英语,那么我想寻求帮助来检查我的语言。谢谢!
Artem Abramov

1
较小的更改建议:“ Apple引入了一个新文件”,“示例文件在这里:”。有问题1.不匹配的报价
索菲软件有限责任公司

3
我总是参考github / gitignore回购,以了解应忽略哪些文件-> github.com/github/gitignore/blob/master/Objective-C.gitignore
eliocs

Answers:


109

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

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


8
如果不打算共享,Apple会将其存储在其中,.xcuserdata因此应将其包括在内。
Joshcodes 2013年

4
正如我在回答中所说,xccheckout文件包含工作空间中使用的所有存储库的信息。无论使用哪种SCM系统,情况都是如此-这样的工作空间可以在svn或git中,并且其项目可以在svn和git存储库中混合使用。
克里斯·汉森

72
看起来xccheckout包含特定于每个开发人员机器的键和名称...当我运行xcode时,它会更改文件中的某些键,并将名为IDESourceControlWCCName的内容从<string> OurCompanyAPI </ string>更改为<string > our_company_api / string>-后者是我在克隆存储库时使用的名称。如果应该共享此文件,则Apple做得很差。
Herr Grumps 2013年

7
当我们签入该文件时,我所有的同事都会得到一个不同的IDESourceControlProjectIdentifier ...因此,我们的.xccheckout每次提交都会被修改。-_-
心教堂

9
无论Apple最初打算做什么,这些.xccheckout文件都会在Xcode 6 beta上引起一些疯狂的问题,因此我决定将它们从VCS中删除。似乎与某些缓存错误有关,我相信Xcode每次都能从VCS自动重新生成它们。
2014年

63

*.xccheckout文件包含VCS元数据,因此不应将其签入VCS。

另一方面:检入此文件可能不会造成合并困难或其他问题。

如果您想忽略此文件(建议使用此文件),则应将此行添加到项目的中.gitignore

*.xccheckout

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

编辑: 存在此文件用于管理Xcode对项目中可能的许多VCS系统的了解,请参见Chris Hanson的答案。对于超过99%的项目,.xccheckout文件是配置过大的问题。


1
如果您可以扩展此语句“它实际上忽略了超出您想要的范围”,那就太棒了。具体来说,进入应在检查该文件夹的其他文件的一些例子。
马克·爱丁顿

后续:从这个问题中,我使用了Adam的.gitignore 。它可以作为要点使用,并且具有xcshareddata文件夹内容的一些描述。
马克·爱丁顿

@ 马克:它忽略了project.xcworkspace/。现在可能还可以,但是我不希望在新的Xcode版本中使用它。
Berik

6
这个答案是不正确的,并且.gitignore它为开发人员提供的GitHub标准应该指定*.xccheckout
Chris Hanson

2
自从引入该文件以来,在将其包含在我的存储库中之后,我最近开始将其从所有存储库中删除。这件事一直在造成合并冲突,主要是在包含我自己的框架作为子模块的项目中。然后,由于我使用git进行子模块管理,因此我从此文件中得不到任何好处。苹果公司,很好,谢谢,但是不,谢谢。
Pascal 2015年

38

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

如果您使用的是诸如Mercurial或git之类的分布式VCS,但就好像它是CVCS一样使用(换句话说,每个人都从共享存储库直接克隆到其计算机上的个人工作区),那么您仍然可能要检查它在。

但是,如果您使用的是DVCS,并且每个人都有自己的远程克隆,例如,在标准用法模式下使用GitHub,则您不想检入此文件。如果您这样做,则Pull Requests将要求您的存储库设置可以复制到其他人的xccheckout文件中,但是您的存储库设置会与其他人的存储库设置不同,因为您都在使用不同的远程存储库。


1
在我看来,这个答案是最好的。检入它们会导致我们团队提交的差异变得不必要的闲聊。我在.gitignore中添加了以下内容以将其保留:* / .xcworkspace / xcshareddata / *。xccheckout我仍然不明白为什么Apple选择将这些信息冗余地存储在.git文件夹中(我唯一的猜测是使事情在整个VCS上始终如一)
Juan CarlosMéndez2015年

20

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

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

正如克里斯·汉森(Chris Hanson)所说,对于一个单一存储库,一个项目的工作空间可能并不重要,但是对于更复杂的事务,这确实非常方便。

您可以在WWDC 2013会话视频了解Xcode中的源代码控制中找到有关此内容的更多信息;相关部分大约在15分钟开始。


仅当您将Xcode用于SCM时,此文件才有用,否则,根本不需要该文件。如果使用git fork,则更少,在这种情况下,每个开发人员的回购路径将是唯一的
Carlos Ricardo

3

这就是我在Xcode的.gitignore中所拥有的。

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

它使任何与项目在存储库中寻找我的方式的本地状态有关的内容。

xccheckout文件位于此处,因此默认情况下不会在我的系统上对其进行跟踪。

Xcode已经变得更好,并且将需要共享的内容和需要保留的内容分开了。例如; 这些行将忽略默认的构建方案,这很好,因为您可以将特定的构建方案标记为共享,并将它们放置在不被忽略的目录中。

断点将被忽略,但是您可以将特定的断点标记为在项目之间共享,并且它们也将放置在不可忽略的目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.