在Xcode中,避免项目文件中Git冲突的最佳方法是什么? (我是手动git,不使用git的Xcode接口)
我从Github克隆了mapbox-ios-sdk,攻击了它,现在远程主人已经改变了。当我尝试将远程更改拉到我的本地时,合并后会在项目文件中出现合并冲突。 (具体来说,我指的是.xcodeproj中的project.pbxproj)
我真的不认为项目文件应该放入忽略,因为如果项目文件中有任何新文件,.pbxproj文件似乎会被更改。 (或者我只是完全错了,这个文件应该被忽略了?但显然它在mapbox-ios-sdk中没有被忽略。毕竟人们需要项目文件。)但我也跑了在我与另一个合作者的合作项目之前进入这场冲突,这让我完全无法使用Git。
我应该弄清楚如何手动解决冲突,还是有更好的方法来解决这个问题?
答案 0 :(得分:26)
.pbxproj将会更改。如果两个或多个协作者同时添加文件(没有先获得彼此的更改),则会发生冲突。我们在项目中通过在添加新文件之前和之后执行以下步骤来避免这种情况:
这很懦弱,但我们不喜欢手动解决.pbxproj冲突。
另外,请参阅此Stack Overflow问题,并提供出色的回复:How to use Git properly with XCode?
答案 1 :(得分:13)
许多网站只建议使用.gitattribute文件:
*.pbxproj merge=union
在尝试使用脚本之前,我们会尝试这种方法。如果我们发现任何问题,我一定会更新这篇文章。如果其他人对此方法有意见,请加入。
答案 2 :(得分:4)
您应该检查我的脚本xUnique,它现在是Apple在对其采取行动之前合并Xcode项目文件的最佳解决方案。
project.pbxproj
转换为JSON格式objects
并为每个UUID提供绝对路径,并使用路径的MD5十六进制摘要创建一个新的UUID
children
,files
,PBXFileReference
和PBXBuildFile
列表,并删除这些列表中的所有重复条目
sort_pbxproj
方法; sort-Xcode-project-file
移植,但在排序PBXFileReference
和PBXBuildFile
检查README文件以获取更多详细信息。
答案 3 :(得分:2)
当这是由两个或多个协作者/分支机构添加文件引起的(根据我的经验,迄今为止一直是这种情况,可以通过查看差异来检查)我这样做:
(我不相信第2步确实是必要的 - 但我感觉更整洁。)
答案 4 :(得分:1)
在大多数情况下,您可以通过以下代码修复合并,删除git添加的行:
#!/bin/bash
FILE={PRODUCT_NAME}.xcodeproj/project.pbxproj
sed '/======/d' $FILE | sed '/<<<<</d' | sed '/>>>>>/d' > temp
cat temp > $FILE
rm temp
但如果您重命名项目组并导致冲突,则会手动删除原始组的额外行。
答案 5 :(得分:1)
您也可以手动使用Mergepbx,如下所示
使用brew安装Mergepbx。
brew install mergepbx
每次项目文件中存在冲突时运行命令以自动解决它们。
git mergetool --tool = mergepbx PROJECT.pbxproj
答案 6 :(得分:1)
我需要在我的分支中获取主代码因此,我是从master那里拉过来的,我在.pbxproj文件中进行了更改,而master具有不同的配置。因此,这在.pbxproj文件中显示了冲突。请按照以下步骤解决它
在Finder中打开 .pbxproj -> 在文件上右键单击选择显示包内容-> 选择。 pbxproj文件,然后使用TextEdit打开它-> 它将显示如下冲突线。
<<<<<<< HEAD"
// head changes
===========
// Your changes
>>>>>>>>
您已从“更改”标题中选择了正确的一个,然后您的更改又删除了其余的。 现在提交您的代码
git add .
git commit -m"conflict resolved"
git status // Check you files status
如果一切正常,请推送代码。
git push
答案 7 :(得分:-1)
我开发了一个用于在Xcode项目文件中修复此类错误的应用程序。不幸的是,您仍然必须先手动进行一些合并。 https://itunes.apple.com/us/app/xsaviour/id1449886415?mt=12