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_Store

build

*.pbxuser

*.perspectivev3

*.mode1v3

.DS_Store

*.lock

.svn

UserInterfaceState.xcuserstate

xcuserdata

*.class

*.swp

.pyc

應該不是二進位的,但是需要手工合併,那麼還是手工合併吧


推薦閱讀:

TAG:Xcode | Git | SVNSubversion | 代碼衝突 | 代碼合併 |