[英]Xcode Project file git merge conflict
在Xcode中,工程文件中避免Git冲突的最佳方法是什么? (我在manual git,不是用git的Xcode接口)
我从 Github 克隆了 mapbox-ios-sdk,破解了它,现在远程主机已经改变了。 当我试图将远程更改拉到我的本地时,合并后项目文件中会出现合并冲突。 (具体来说,我指的是.xcodeproj中的project.pbxproj)
我真的不认为应该忽略项目文件,因为如果项目文件有任何新文件,.pbxproj 文件似乎已更改。 (或者我完全错了,这个文件应该被忽略?但显然它并没有在 mapbox-ios-sdk 中被忽略。毕竟人们需要项目文件。)但我也跑了在我与另一个合作者的合作项目之前就陷入了这场冲突,这让我无法完全使用 Git。
我应该弄清楚如何手动解决冲突还是有更好的方法来处理这个问题?
.pbxproj 将在您向项目添加新文件时更改。 如果两个或多个协作者同时添加文件(而不先获取彼此的更改),则会发生冲突。 我们在我的项目中通过在添加新文件之前和之后执行以下步骤来避免这种情况:
它很弱,但我们不喜欢手动解决 .pbxproj 冲突。
另外,请参阅此堆栈溢出问题,并给出了很好的回答: How to use Git correct with XCode?
许多网站只是建议使用 .gitattributes 文件:
*.pbxproj merge=union
在尝试使用脚本之前,我们将尝试这种方法。 如果我们发现任何问题,我一定会更新这篇文章。 此外,如果其他人对此方法有意见,请包括在内。
您应该检查我的脚本xUnique ,它现在是在 Apple 对其采取行动之前合并 Xcode 项目文件的最佳解决方案。
project.pbxproj
转换为 JSON 格式objects
并给每个 UUID 一个绝对路径,并使用路径的 MD5 十六进制摘要创建一个新的 UUID
children
、 files
、 PBXFileReference
和PBXBuildFile
列表的项目文件进行排序,并删除这些列表中的所有重复条目
sort_pbxproj
方法;sort-Xcode-project-file
移植而来的,在PBXFileReference
和PBXBuildFile
排序上有一些差异检查README文件以获取更多详细信息。
在大多数情况下,您可以通过以下代码修复合并,删除 git 添加的行:
#!/bin/bash
FILE={PRODUCT_NAME}.xcodeproj/project.pbxproj
sed '/======/d' $FILE | sed '/<<<<</d' | sed '/>>>>>/d' > temp
cat temp > $FILE
rm temp
但是如果你重命名你的项目的组,导致冲突,你将手动删除原来组的多余行。
当这是由于添加来自两个或多个合作者/分支的文件(根据我的经验,迄今为止一直如此,可以通过查看差异来检查)引起的,我这样做:
(我不相信第 2 步真的有必要——但对我来说感觉更整洁)。
您也可以使用 Mergepbx 手动执行如下操作
使用 brew 安装Mergepbx 。
brew安装mergepbx
每次在项目文件中出现冲突时运行命令以自动解决它们。
git mergetool --tool=mergepbx PROJECT.pbxproj
我需要在我的分支中获取 master 代码所以,我从 master 那里拉取,并且我在我的 .pbxproj 文件中进行了更改,并且 master 具有不同的配置。所以,它在 .pbxproj 文件中显示冲突。 请按照以下步骤解决它
在 Finder 中打开.pbxproj ->右键单击文件选择Show Package Contents -> 选择 。 pbxproj 文件并使用 TextEdit- >打开它,它将显示如下冲突行。
<<<<<<< HEAD"
// head changes
===========
// Your changes
>>>>>>>>
您已经从 head Changes 和您的更改中选择了正确的一个,然后删除其余的。 现在提交你的代码
git add .
git commit -m"conflict resolved"
git status // Check you files status
如果一切正常,则推送您的代码。
git push
如果一切都失败了,虽然乏味。 您可以在 git 客户端中打开 pbxproj,然后逐个文件手动打开 go 并确保每个文件都被删除或有 4 行(出现 6 次)。
我也遇到了同样的问题,于是在Swift写了一个工具,可以解决文件和组的增删改名冲突。 您可以将其设置为 git 合并驱动程序,以便脚本在您合并分支时自动运行。
你可以在这里查看: XcodeMergeDriver
我制作了一个应用程序,用于在出现此类问题时修复 Xcode 项目文件中的内容。 不幸的是,您仍然必须先进行一些手动合并。 https://itunes.apple.com/us/app/xsaviour/id1449886415?mt=12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.