[英]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.