【问题标题】:Should *.xccheckout files in Xcode5 be ignored under VCS?Xcode5 中的 *.xccheckout 文件是否应该在 VCS 下被忽略?
【发布时间】:2013-08-22 19:45:18
【问题描述】:

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

这个文件位于“.xcodeproj/project.xcworkspace/xcshareddata/”目录下,貌似和项目的版本控制系统有关。

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

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

以下是问题:

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

【问题讨论】:

  • 这个问题往往很相关;因此我希望它在语法和句法上更正确。如果你的母语是英语或者你非常精通英语,我想寻求帮助以检查我的语言。谢谢!
  • 建议的小改动:“Apple 引入了一个新的”,“这里有一个示例文件:”。问题 1 中的引用不匹配。
  • 我总是参考 github/gitignore repo 来了解哪些文件应该被忽略 -> github.com/github/gitignore/blob/master/Objective-C.gitignore

标签: xcode git version-control xcode5


【解决方案1】:

应该签入 Xcode 5 .xccheckout 文件;一般来说,xcshareddata 中的文件应该被提交。

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

【讨论】:

  • 如果不打算共享,Apple 会将其存储在 .xcuserdata 中,因此应包含在内。
  • 正如我在回答中所说,xccheckout 文件包含工作区中使用的所有存储库的信息。 不管他们使用什么 SCM 系统都是这种情况——这样的工作空间可以在 svn 或 git 中,它的项目可以在 svn 和 git 存储库的混合中。
  • 看起来 xccheckout 包含特定于每个开发人员机器的键和名称...一旦我运行 xcode,它就会更改文件中的一些键,并从 更改名为 IDESourceControlWCCName 的东西OurCompanyAPIour_company_api/string> - 后者是我在克隆 repo 时使用的名称。如果这个文件应该被共享,那么 Apple 做得很差。
  • 当我们签入这个文件时,我所有的同事都会得到一个不同的 IDESourceControlProjectIdentifier ......所以我们的 .xccheckout 每次提交都会被修改。 -_-
  • 不管 Apple 最初的用途是什么,.xccheckout 文件在 Xcode 6 beta 上造成了一些疯狂的问题,我决定将它们从 VCS 中删除。似乎与一些缓存错误有关,我相信 Xcode 可以自动从 VCS 重新生成它们,每次。
【解决方案2】:

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

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

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

*.xccheckout

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

编辑: 该文件用于管理 Xcode 对您项目中可能存在的许多 VCS 系统的了解,请参阅Chris Hanson 答案。对于 > 99% 的项目,.xccheckout 文件是过度配置。

【讨论】:

  • 如果你能扩展这句话“它实际上忽略了比你想要的更多”,那就太棒了。具体来说,应该签入该文件夹中的其他文件的一些示例。
  • 跟进:我正在使用来自 Adam 的 .gitignore 来自 question。它以gist 的形式提供,并且对 xcshareddata 文件夹内容进行了一些描述。
  • @Mark:它忽略了project.xcworkspace/。现在可能没问题,但我不会指望新的 Xcode 版本。
  • 这个答案是不正确的,它提供给开发者的GitHub标准.gitignore应该指定*.xccheckout
  • 自从它被引入以来,在我的 repos 中包含这个文件之后,我最近开始从我的所有 repos 中删除它。这件事一直在制造合并冲突,主要是在包含我自己的框架作为子模块的项目中。然后我没有从这个文件中获得任何东西,因为我使用 git 进行子模块管理。不错的尝试,Apple,谢谢,但不,谢谢。
【解决方案3】:

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

如果您使用的是分布式 VCS,例如 Mercurial 或 git,但将其用作 CVCS(换句话说,每个人都从共享存储库直接克隆到他们机器上的个人工作区),那么您仍然可能想要签入。

但是,如果您使用 DVCS,每个人都有自己的远程克隆,例如在其标准使用模式中使用 GitHub,您不想签入此文件。如果您这样做了,那么您的 Pull Requests 将要求您的存储库设置将被复制到其他所有人的 xccheckout 文件中,但您的存储库设置将与其他所有人的不同,因为您都使用不同的远程存储库。

【讨论】:

  • 这个答案在我看来是最好的。签入它们会导致我们团队提交的差异出现不必要的闲聊。我将以下内容添加到 .gitignore 以将它们排除在外:*/.xcworkspace/xcshareddata/*.xccheckout 我仍然不明白为什么 Apple 选择将这些信息冗余存储在 .git 中文件夹(我唯一的猜测是让事情在 VCS 中始终如一地工作)
【解决方案4】:

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

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

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

您可以在 WWDC 2013 会议视频Understanding Source Control in Xcode 中找到更多相关信息;相关部分从大约 15 分钟开始。

【讨论】:

  • 此文件仅在您使用 Xcode for SCM 时才有用,否则您根本不需要该文件。如果您使用 git 分叉,则更少,在这种情况下,每个开发人员的 repo 路径将是唯一的
【解决方案5】:

这就是我的 .gitignore for Xcode 中的内容。

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

它将与项目在存储库中查找我的方式的本地状态相关的所有内容保留在存储库中。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2023-04-03
    相关资源
    最近更新 更多