【问题标题】:Should I merge .pbxproj files with git using merge=union?我应该使用 merge=union 将 .pbxproj 文件与 git 合并吗?
【发布时间】:2011-02-13 07:41:04
【问题描述】:

我想知道 .gitattributes 中的 merge=union 选项对 .pbxproj 文件是否有意义。

此选项的手册页状态:

为文本文件运行 3-way 文件级合并,但从两个版本中获取行,而不是留下冲突标记。这往往会使结果文件中添加的行以随机顺序保留,用户应验证结果。

通常,这对于将文件添加到项目的 90% 情况应该没问题。有人有这方面的经验吗?

【问题讨论】:

  • 嘿 Ortwin,您最终尝试过这个吗?如果尝试过,您的体验如何?
  • Dick,我进行了手动合并,但在 90% 的情况下,我最终都添加了双方。使用像 Tower 这样的图形化 git 客户端,手动合并并不是什么大问题,所以这对我来说非常有用。

标签: objective-c cocoa git merge


【解决方案1】:

不是直接体验,而是:

  • 这个SO question 真的建议再次合并.pbxproj 文件。

pbxproj 文件并不是真正的人类可合并的。
虽然它是纯 ASCII 文本,但它是一种 JSON 格式。本质上,您希望将其视为二进制文件。

(因此是gitignore solution

其实Peter Hosey在评论里加了:

这是一个 property list,而不是 JSON。相同的想法,不同的语法。

事实是,禁止合并该 .pbxproj 文件比它有用的方式更有害。
.pbxproj 文件是简单的 JSON(类似于 XML)。根据经验,您遇到的唯一合并冲突是两个人同时添加文件。 99% 的合并冲突情况的解决方案是保留合并的双方。

所以合并“联合”(带有gitattributes merge directive)是有道理的,但是做一些测试看看它是否与上一个问题中提到的脚本做同样的事情。

【讨论】:

  • 这是一个属性列表,而不是 JSON。相同的想法,不同的语法。 developer.apple.com/mac/library/documentation/Cocoa/Conceptual/…
  • @Peter:感谢您的指正。我已经更新了答案。
  • 我刚刚遇到了这个问题和答案。这似乎是个好主意,我想不出随机穿插的条目会在哪里弄乱任何东西。有没有人尝试过这个?
  • @PeterHosey 是对的,这里有更多关于该主题的信息en.wikipedia.org/wiki/Property_list
  • 我们(一个 3 人团队)尝试了这个配置大约 2 个月,并且工作正常,直到最近我们有一堆删除和添加文件。从那以后 pbxproj 一直失败。因此,我们决定再次手动合并。
【解决方案2】:

我最近一直在与一个大型团队合作,并尝试了*.pbxproj merge=union,但最终不得不将其删除。

问题是大括号会定期变得不合适,这使得文件无法读取。确实,tho 在大多数情况下都可以工作 - 但可能有 4 次失败。

我们现在恢复使用*.pbxproj -crlf -merge。这似乎是对我们可行的最佳解决方案。

【讨论】:

  • 我和科里有同样的经历。对我们来说,当两个开发人员在不同的分支上添加一个组时,就会发生这种情况。项目文件以一种奇怪的方式处理 Group 排序,这使得 merge=union 在这种情况下无法正常工作。对我们来说,失败时的弊端大于成功时的好处。一旦你习惯了在项目文件中合并左右两侧的变化,那就不算太糟糕了。
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 2016-03-20
  • 2014-01-28
  • 1970-01-01
  • 2021-08-26
  • 2012-10-06
  • 2010-12-05
  • 2014-12-04
相关资源
最近更新 更多