8

背景:git——或任何其他 SCM——可以“成功”合并 Storyboard、xib 和 pbxproj 文件,因为它们的核心只是 xml。有时存在可以通过通常的冲突解决策略来解决的冲突。但是 xib 和 Storyboard 是一些非常复杂的数据结构的序列化格式,所以乐趣就开始了。

与其他源代码一样,成功的合并并不能保证所有合并的更改一起正常工作。对于有问题的文件,git 可以成功合并,但 Xcode 有时会在您尝试打开它时显示“无法读取存档”错误 - 即,合并损坏了 xib。

我已经看到关于让 git 忽略 .xibs (不实用)的建议,或者在 .gitattributes 通过设置禁用差异

*.xib -crlf -diff

从技术上讲,这解决了合并冲突/损坏的 xib 问题 - 但现在有人的更改丢失了?

同样,我见过的项目文件的最佳建议是 .gitattributes 中的 merge=union:

*.pbxproj merge=union

问题:我搜索了很多,似乎没有一个好的解决方案。有经验的人能告诉我在几个用例中会发生什么吗?

  1. 在项目中,我将一个文件从 x 重命名为 y,然后删除 fileA。与此同时,另一位程序员提交了添加 fileC 和删除 fileD 的更改。合并的结果是什么?我确信实际的文件系统更改是正确的,但是在 Xcode 导航器面板中:

    • 我会看到 x 和 Y 吗?
    • fileA 是否会重新出现,因为它仍在其他程序员的 .pbxproj 中?
    • fileD 是否仍然存在,因为它仍在我的 .pbxproj 中?
  2. 如果 git 忽略 .xib 文件 - 我至少会收到一个警告,指出文件已更改且未被处理?

4

1 回答 1

1

这些天我不会.gitattributes为项目文件或笔尖设置任何特定内容。

将并发更改合并到 Xcode 项目和 xibs/storyboard 的问题存在于每个拥有多个开发人员的团队中。

Xcode 项目

处理 Xcode 项目冲突的一些技巧:

  • 采取合并的一侧并在合并后手动应用其他更改。如果您删除了文件,它们将显示为红色,如果您需要添加它们,它们将可以添加。
  • 将文件添加到目标时,它们将位于“编译源”构建阶段的底部。通过将此列表向上拖动到随机位置来避免与其他人发生冲突。
  • 使用.xcconfig文件而不是构建设置部分来配置您的项目。配置文件很容易合并。

如果有疑问,我最好的建议是采取合并的一侧,放松并重播您的添加。

XIB 和故事板

最近几个月,XIB(以及故事板)的格式发生了显着变化。我发现附加对象被附加到文件的内部集合中,并且可以轻松完成合并。如果您对同一个对象进行更改,您可能必须手动进入。

Itty Bitty Apps 的这篇文章重点介绍了主要变化:

这种新的 XIB XML 格式的好处是多方面的:

  • XIB 更小(更少的代码行)。
  • 开发人员可以轻松阅读 XML 并理解它在用户界面中指定的内容。
  • 合并 XIB 现在不太可能导致 XIB 损坏。在此之前,我们甚至很少会尝试合并 XIB 或 Storyboard。
于 2013-12-08T00:43:22.723 回答