xcode中的project.pbxproj衝突怎麼解決
用git/svn等工具協作時,如果甲乙兩人都同時修改了*項目結構*,則project.pbxproj會衝突.網上看了下這個文件不能直接文本合併,應該當作二進位文件處理,這樣的話,只能以一個的改動為準,另一個手工修改項目結構.每次這麼處理都很麻煩,有沒有很好的解決方法?
試試我剛開發的腳本:xUnique 一勞永逸的解決project.pbxproj的問題。功能如下:
- 替換所有UUID為項目內永久不變的MD5 digest
- 刪除所有多餘或者非法的節點(一般是合併的時候疏忽或者其他奇怪的原因導致的)
- 使用我修改過的的sort-Xcode-project-file進行排序,修改版相較原版增加了對PBXFileReference和PBXBuildFile區塊的排序
- 腳本支持多個多個命令行參數
- 目前支持以下經過測試的類型:
- PBXProject
- XCConfigurationList
- PBXNativeTarget
- PBXTargetDependency
- PBXContainerItemProxy
- XCBuildConfiguration
- PBXSourcesBuildPhase
- PBXFrameworksBuildPhase
- PBXResourcesBuildPhase
- PBXBuildFile
- PBXReferenceProxy
- PBXFileReference
- PBXGroup
- PBXVariantGroup
此腳本建議每個項目成員都加到pre-commit hook中使用,這樣就永遠不會亂了。
由於樣本較少,可能有些節點未覆蓋到,有問題的話歡迎提issue或者pull request
更詳細的可以看我寫的專欄(中文版 一勞永逸解決Xcode項目文件合併「夢魘」 - 腳本改變生活 - 知乎專欄)
最新更新及說明以README為準:xUnique/README.rst at master · truebit/xUnique · GitHub
simply add the following line to your .gitattributes file:
*.pbxproj text -crlf -diff -merge=union
這個問題我太熟悉了,基本上天天遇到,說一下我是怎麼處理的:
project.pbxproj就是一個文本文件(不是binary),這個文件描述了這個project裡面到底由什麼文件構成,如何組織,project setting也在其中,倘若兩個人同時在某一個版本節點上都進行了修改,例如增刪文件等行為,那麼保存/提交就會出現衝突,如果是svn就會強制在文件中給你加上&>&>&>&>&> 還有&<&<&<&<&<來區分誰誰做的修改,只要把這個文件用編輯器打開,搜&>&>&>&>搜到了刪了這些亂七八糟的東西,恢復原狀就沒事了。XIB其實也是文本文件,遇到衝突也可以這樣解決。這個問題總是一直比較蛋疼……我們用的解決方案是需要增加文件時先增加完空文件後立刻checkin一次,讓別人每次改動 pbxproj的時候改動之前checkout一次,保證有交叉時間是可能性最小
一般衝突的時候就revert掉自己本地的,然後重新添加自己新建的文件。如果改動很多就把Class目錄從工程裡面Delete掉,記得刪除References而不是從磁碟刪除。然後重新添加Class目錄就ok了。
開發的時候經常碰到,由於是文本文件,所以都是手工合併解決掉。
有一個技巧,就是席浩洋所說的,即添加或改動文件布局時先更新,改完後要立即提交,團隊成員都遵照這個約定。我們用的是git.一般都是各自在工程中建立文件,添加文件到工程中,這些衝突。一旦有了這些衝突後.pbxproj可能就打不開了。我們都是先查看衝突的地方,再用編輯器打開.pbxproj文件,搜索&<&<&<&<這樣類似文本,刪掉你不需要的。當..pbxproj文件可以打開時就用xcode打開,刪除衝突的地方。
1. git reset HEAD Pods/Pods.xcodeproj/project.pbxproj
2. git pull origin your_branch
3. pod update --no-repo-update
當做文本文件衝突解決就好了。支持『席浩洋』的建議,盡量減少交叉修改幾率
基本無解的問題,很想知道多人合作的項目是怎麼管理這個問題的。而且我很想知道多人團隊如果用storyboard做界面,是不是合併這個文件會有想砸電腦的衝動?(我本人沒實踐過合併storyboard文件,純屬臆測)。
蛋疼的問題!
親測用XUnique比較靠譜,輔助使用管理手段即可,修改前更新並通知, 修改後工程後儘快提交,並通知大家更新
平時使用CornerStone這個svn的協同工作軟體,在遇到兩個工程師同時修改了工程文件的時候,的確是會有衝突出現,下圖的第一個文件會出現衝突的三個版本:這個時候如果你同事是上司主導統籌開發的話,那麽項目工程的配置應當按他的為準,可以直接刪除前兩個project.pbxproj,將最後的project.pbxproj重命名直接使用,就可以了。
一勞永逸解決Xcode項目文件合併「夢魘」 - 技術宅 - 知乎專欄我自己並沒有使用過,供題主參考。
明白了,不是我一個人頭疼的問題
git和svn都應該有ignore設置,比如在git下叫做.gitignore文件,我的常用.gitignore文件如下:
._.DS_Storebuild*.pbxuser*.perspectivev3*.mode1v3.DS_Store*.lock.svnUserInterfaceState.xcuserstate
xcuserdata*.class*.swp.pyc應該不是二進位的,但是需要手工合併,那麼還是手工合併吧推薦閱讀:
TAG:Xcode | Git | SVNSubversion | 代碼衝突 | 代碼合併 |