Git,如何为Storyboards和.xib文件设置.gitattributes

Kev*_*ara 8 git xcode xib ios uistoryboard

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

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

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

*.xib -crlf -diff
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这可以修复合并冲突/损坏的xib问题 - 但现在有人的更改会丢失吗?

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

*.pbxproj merge=union
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jes*_*edc 1

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

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

Xcode 项目

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

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

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

XIB 和故事板

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

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

这种新的 XIB XML 格式的优点是多方面的:

  • XIB 更小(代码行更少)。
  • 开发人员可以轻松阅读 XML 并理解它在用户界面中指定的内容。
  • 现在,合并 XIB 导致 XIB 损坏的可能性大大降低。在此之前,我们很少尝试合并 XIB 或 Storyboard。