Xcode项目文件git合并冲突

hug*_*gie 29 git xcode

在Xcode中,避免项目文件中Git冲突的最佳方法是什么?(我是手动git,没有使用Gcode的Xcode接口)

我从Github克隆了mapbox-ios-sdk,攻击它,现在远程主机已经改变了.当我尝试将远程更改拉到我的本地时,合并后会在项目文件中出现合并冲突.(具体来说,我的意思是.xcodeproj中的project.pbxproj)

我真的不认为项目文件应该放入忽略,因为如果项目文件中有任何新文件,.pbxproj文件似乎会被更改.(或者我只是完全错了,这个文件应该被忽略了?但显然它在mapbox-ios-sdk中没有被忽略.毕竟人们需要项目文件.)但我也跑了在我与另一个合作者的合作项目之前进入这场冲突,这让我完全无法使用Git.

我应该弄清楚如何手动解决冲突,还是有更好的方法来解决这个问题?

cma*_*mac 28

将新文件添加到项目时,.pbxproj将更改.如果两个或多个协作者同时添加文件(没有先获得彼此的更改),则会发生冲突.我们在项目中通过在添加新文件之前和之后执行以下步骤来避免这种情况:

  1. 在添加文件之前,提交您的更改,然后从主服务器中提取,以便您拥有最新的.如果有人添加了文件,您现在拥有最新的.pbxproj
  2. 添加您的文件.
  3. 立即提交并将更改推送到主服务器(希望在另一个协作者添加另一个文件之前).

它很懦弱,但我们不喜欢手动解决.pbxproj冲突.

此外,请参阅此Stack Overflow问题并提供出色的响应:如何在XCode中正确使用Git?

  • 不是一个伟大的策略,看到这里我们喜欢有意义的,始终正常运行的提交.这会破坏这一点. (7认同)
  • 当您使用功能分支和/或超过一两个协作者时,这不可行。 (2认同)

War*_*zit 17

许多网站只是建议使用.gitattribute文件:

*.pbxproj merge=union

在尝试使用脚本之前,我们将尝试这种方法.如果我们发现任何问题,我一定会更新这篇文章.如果其他人对此方法有意见,请包含.

  • http://roadfiresoftware.com/2015/09/automatically-resolving-git-merge-conflicts-in-xcodes-project-pbxproj/中的详细信息 (3认同)

Xia*_*iao 5

您应该检查我的脚本xUnique,它现在是在 Apple 对其采取行动之前合并 Xcode 项目文件的最佳解决方案。

它的作用和工作原理

  1. 转换project.pbxproj为 JSON 格式
  2. objects在 JSON 中迭代所有内容并为每个 UUID 提供一个绝对路径,并使用路径的 MD5 十六进制摘要创建一个新的 UUID
    • 这个json对象中的所有元素实际上都是连接成一棵树
    • 我们使用其唯一属性为树的每个节点赋予路径属性;这个路径是根节点的绝对路径,
    • 将 MD5 十六进制摘要应用于节点的路径
  3. 用 MD5 十六进制摘要替换所有旧的 UUID,并删除不在当前节点树中的未使用 UUID 和格式错误的 UUID
  4. 排序项目文件计有childrenfilesPBXFileReferencePBXBuildFile列表,并删除这些列表中的所有重复的条目
    • sort_pbxproj如果您想了解实现,请参阅xUnique.py 中的方法;
    • 它是从我的修改版移植过来的sort-Xcode-project-file,在排序PBXFileReferencePBXBuildFile
  5. 通过不同的选项,您可以更灵活地使用xUnique

检查README文件以获取更多详细信息。