在版本控制系统(VCS)下,是否应该忽略Xcode5中的*.xccheckout文件?
在版本控制系统(VCS)下,是否应该忽略Xcode5中的*.xccheckout文件?
苹果在Xcode 5中引入了一种新的与项目相关的文件类型:\"xccheckout\"。\n该文件位于\".xcodeproj/project.xcworkspace/xcshareddata/\"目录下,似乎与项目的版本控制系统有关。\n一个示例文件可以在这里找到:http://pastebin.com/5EP63iRa。\n我猜测这种类型的文件应该被版本控制系统忽略,但我不确定。\n所以这里有几个问题:\n
- \n
- 应该忽略\"xccheckout\"吗?
- 它的目的是什么?
\n
\n
随着开发团队使用分布式版本控制系统(DVCS)的增多,一个关于在Xcode5中是否应该忽略*.xccheckout文件的问题变得更为重要。*.xccheckout文件包含了与远程仓库相关的引用信息。如果使用的是集中式版本控制系统(CVCS)如Perforce或Subversion,每个人的远程仓库都会是相同的,所以可以并且应该将该文件纳入版本控制。
然而,如果使用的是分布式版本控制系统如Mercurial或git,并且将其作为CVCS使用(也就是所有人都从共享仓库直接克隆到个人工作区),那么可能仍然希望将该文件纳入版本控制。
但是,如果使用的是DVCS,并且每个人都有自己的远程克隆仓库,例如在标准使用模式下使用GitHub,那么就不应该将该文件纳入版本控制。如果这样做了,你的Pull Request会要求将你的仓库设置复制到其他人的xccheckout文件中,但是由于大家都在使用不同的远程仓库,你的仓库设置与其他人的设置是不同的。
对于我来说,这个答案是最好的。将它们纳入版本控制会导致团队提交的差异变得很冗杂。我在.gitignore中添加了以下内容以排除它们:*/.xcworkspace/xcshareddata/*.xccheckout
我仍然不理解为什么Apple选择要冗余地存储这些信息,毕竟这些信息已经在.git文件夹中了(我唯一的猜测是为了使不同的版本控制系统能够一致地工作)。
在Xcode5中,应该忽略*.xccheckout文件,不应该将其检入版本控制系统(VCS)。但是,检入该文件可能不会导致合并困难或其他问题。如果想要忽略该文件(我建议这样做),应将以下行添加到项目的.gitignore文件中:*.xccheckout
Abizern的解决方案对于工作空间中的项目不起作用。因为当使用工作空间时,*.xccheckout文件的路径将是:
这个文件存在是为了管理Xcode对项目中可能存在的多个版本控制系统的了解,参见Chris Hanson的答案。对于大多数项目来说,.xccheckout文件是配置的过度。
如果你能展开这个语句“它实际上忽略了比你想要的更多的文件”,会非常好。具体来说,一些应该检入的其他文件的示例。
后续:我正在使用来自Adam的.gitignore,来自这个问题。它作为一个gist提供,并对xcshareddata文件夹的内容进行了一些描述。
它忽略了project.xcworkspace/。现在可能还可以,但我不会指望新的Xcode版本也能这样。
github的当前版本的.gitignore包含*.xccheckout。使用那个。
这个答案是错误的,GitHub提供给开发者的标准.gitignore不应该指定*.xccheckout。
请参见下面的我的答案。xcshareddata中的所有内容都应该被检入,我列出了将xccheckout文件检入的原因。
我对Berik为什么说Chris Hanson的答案是正确的然后立即陈述相反的观点感到困惑!Berik,我认为你需要澄清你在这个答案中的意思。目前它类似于“医生说抽烟有害,他们是正确的。烟草有害,所以你应该继续抽烟。”无法理解!
我非常困惑。Github上的最新Objective-C标准.gitignore排除了*.xccheckout。如果社区中有人能给出一个明确的答案,那将是很棒的。苹果对此缺乏文档说明令人震惊。
.xccheckout文件应该放在版本控制系统中。我正在尝试在带有子模块的项目中使用Xcode 6的持续集成,而我在.gitignore中忽略了xccheckout文件。我几乎可以确定这样做是不起作用的(现在无法确定)。我从苹果找到的最接近的文档是这个(文档末尾没有xccheckout在gitignore中)。另外,xccheckout在xcshareddata中...
自从引入这个文件以来,我一直在将其包含在我的存储库中,但最近开始将其从所有存储库中删除。这个东西一直在不停地创建合并冲突,尤其是在包含我自己的框架作为子模块的项目中。而且,我对此文件几乎没有任何收益,因为我使用git来管理子模块。苹果,很好的尝试,谢谢,但我不需要了。
@Mark,请使用此更新后的链接重新发布您的评论:developer.apple.com/library/content/documentation/IDEs/...
在Xcode5中,是否应该在版本控制系统(VCS)下忽略*.xccheckout文件?
问题的出现原因:
- *.xccheckout文件包含有关工作空间中使用的存储库的元数据。
- 当工作空间中有来自不同存储库的多个项目时,*.xccheckout文件的存在可以让Xcode知道工作空间的所有组件以及如何获取它们。
- 如果*.xccheckout文件不应该被共享,苹果会将其存储在.xcuserdata中。
解决方法:
- 应该将*.xccheckout文件添加到版本控制中。
- 如果使用的是git和gitmodules进行版本控制,*.xccheckout文件中的信息会重复,但这样可以确保无论使用哪种版本控制系统都能正常工作。
- 尽管*.xccheckout文件包含了每位开发者机器特定的键和名称,但应该将其共享,因为Xcode可以自动重新生成它。
在Xcode5中,应该将*.xccheckout文件添加到版本控制中,以确保工作空间中的所有组件都能正常工作。尽管该文件包含了每位开发者机器特定的信息,但它仍然可以被共享,并且可以在不同的版本控制系统下正常工作。