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