合并分支时,Xcode项目文件(Project.xcodeproj / project.pbxproj)经常会发生冲突(我正在使用git)。有时它很容易,但有时我最终会得到一个损坏的项目文件并且必须还原。在最糟糕的情况下,我必须通过拖动文件等手动在第二次提交(可以用前一次提交)中手动修复项目文件。
有没有人有关于如何处理大型和复杂文件(如Xcode项目文件)中的合并冲突的提示?
编辑 - 一些相关问题:
Should I merge .pbxproj files with git using merge=union?
资源:
http://www.alphaworks.ibm.com/tech/xmldiffmerge
http://www2.informatik.hu-berlin.de/~obecker/XSLT/#merge
http://tdm.berlios.de/3dm/doc/thesis.pdf
http://www.cs.hut.fi/~ctl/3dm/
http://el4j.svn.sourceforge.net/viewvc/el4j/trunk/el4j/framework/modules/xml_merge/
答案 0 :(得分:8)
将项目分解为更小,更逻辑的库/包。大规模的项目经常是糟糕设计的标志,比如太过分或太大的对象。
轻松重建的设计 - 如果您正在编写必须由多个工具或IDE构建的程序,这也会有所帮助。我可以通过添加一个目录来重建我的许多“项目”。
删除无关的构建阶段。示例:我已从所有项目中删除了“复制标题”构建阶段。通过include指令明确包含特定文件。
尽可能使用xcconfig文件。这也减少了更新构建时必须进行的更改次数。 xcconfig文件定义构建设置的集合,并支持#include
。当然,在定义要使用的xcconfig时,然后从每个项目和目标中删除(大多数)用户定义的设置。
对于目标依赖项:创建执行逻辑操作的目标,而不是物理操作。这通常是shell脚本目标或聚合目标。例如:“build dependencies”,“run all units tests”,“build all”,“clean all”。那么你不必每一步都保持每一个依赖变化 - 就像使用引用一样。
为您的代码定义一个常见的“源树”,为第三方源定义第二个。
有外部构建工具可用。这可能是您的选择(至少对您的某些目标而言)。
此时,xcodeproj将更加简单。它将需要更少的更改,并且非常容易重建。您可以进一步了解这些概念,以进一步降低项目和构建的复杂性。
答案 1 :(得分:3)
您可能想尝试https://github.com/simonwagner/mergepbx/
这是一个可以帮助您正确合并Xcode项目文件的脚本。请注意,它仍然是alpha。
免责声明:我是mergepbx的作者。
答案 2 :(得分:2)
我发现的最好方法是指示Git将.pbxproj文件视为二进制文件。这可以防止混乱的合并。
将此添加到.gitatributes文件中:
*.pbxproj -crlf -diff -merge
答案 3 :(得分:2)
比较两个Xcode项目打开FileMerge(打开xcode并选择Xcode(来自manu窗格) - >打开开发人员工具 - > FileMerge)。 现在单击“左”按钮并打开xcode项目主目录。 单击“右侧”按钮,打开xcode项目主目录进行比较。
现在点击“合并”按钮!
多数民众赞成!
答案 4 :(得分:0)
另一个考虑的选项可能有助于减少您遇到问题的次数。为了解释,我将称团队成员的分支来自“开发”分支。 在您的团队中有一个约定,即在修改项目文件时,更改(以及确保构建完整性所需的任何其他更改)将在单独的提交中提交。然后,这个提交被挑选到开发分支上。计划修改其分支中的项目文件的其他团队成员可以选择进入他们的分支机构,或者在最新的开发项目中修改他们的分支。这种方法需要整个团队和一些学科的沟通。正如我所说,它并不总是可能的;在一些项目中,它可能会有很大帮助,而在某些项目上可能没有。