Git合并二进制文件(特别是Xcode项目文件)

时间:2010-01-18 10:28:20

标签: xcode git

我在git下有一个Xcode项目,而且我的“master”分支有一个“实验性”分支。自分支以来,两个分支都有分歧(所以没有快进!),我正在将“实验”合并到我的“主”分支中。

我已经设置了一个.gitattributes文件来将特定的Xcode文件(project.pbxproj)视为二进制文件,因为它应该被视为二进制文件。但是,我不确定如何合并它。我不确定那个特定文件是做什么的,但是如果它处理了哪些文件被添加到项目中,我就无法合并它们,因此我必须手动将某些文件添加回项目(可能不是记得他们所有)。其他人如何处理这种情况?

另外,我已经读过你必须手动更新二进制文件(显然)或复制不同的版本。但是,一旦进入合并过程,我工作副本中的文件就是“主”版本。我如何访问“实验”版本?我无法检查它,因为它会破坏合并过程。

谢谢你的时间!

1 个答案:

答案 0 :(得分:9)

一般情况下,对于二进制文件,我建议使用copy-merge type of .gitattribute directive 也就是说,我只是复制来自合并远程端的文件。

对于.pbxproj个文件,这可能不是一个好的选择,如described here

  

包装这些文件只会让我的问题变得更糟 - 因为你完全无法合并更改。
  虽然您可以在某些情况下合并项目文件,但这不是您应该做的事情   依靠能够做到。基本建议是避免与其他人同时编辑项目文件。

我喜欢版本化项目文件(例如ones for Eclipse),只有我知道它们是:

  • 经常不修改(当然不是每个开发人员都修改)
  • 仅使用相对路径
  • 没有针对一个工作站的数据

简而言之,如果不合并这些文件(或者只是简单地合并),我希望它们在VCS中。在您的情况下,首先将它们放入所述VCS中可能没那么有用。


注意:如Git manual中所述:

  

在合并期间,索引包含每个文件的三个版本。这三个“文件阶段”中的每一个代表文件的不同版本:

$ git show :1:file.txt  # the file in a common ancestor of both branches
$ git show :2:file.txt  # the version from HEAD.
$ git show :3:file.txt  # the version from MERGE_HEAD