最近在對項目進行重構,另一方又在進行開發。而且項目用的SVN進行的版本控制所以就悲劇了,因為普通的沖突很好解決,但是不普通的沖突還是遇到了,svn中提交文件時出現tree conflicts。
目錄結構沖突比較繁瑣以下是產生目錄結構沖突的表現:
1、本地刪除,更新后傳入修改
產生原因:
(1)、A修改文件Foo.c后提交到版本庫中,B將Foo.c重命名為Bar.c或者刪除了Foo.c或者直接將Foo.c的父目錄Foo直接刪除 (2)、B更新工作副本會提示該沖突,在working copy顯示為Foo.c在本地刪除,被標記為沖突。如果是重命名,則Bar.c被標記為新增,但是不包括A的修改。
解決:A與B要確認是否采用A的修改與是否重命名。如果采用A的修改,并且要重命名則修改后,標記沖突解決,svn resolved,最后提交;如果不采用A的修改,直接標記沖突解決提交即可。
2、本地編輯,更新后傳入刪除
產生原因:
(1)、A對Foo.c重命名為Bar.c并提交到版本庫(或者A將Foo.c的上級目錄Foo修改為Bar),B在他的工作副本中對Foo.c進行修改。
(2)、B提交前更新,會提示如此錯誤。
解決:同樣需要兩個人進行協商后修改。
3、本地刪除,更新后傳入刪除
產生原因:
(1)、A將Foo.c重命名為Bar.c后提交,B對Foo.c重命名為Bix.c。
(2)、B更新本地工作副本是會提示該樹沖突。
解決:通過日志查找文件被刪除即重命名的原因,A與B協商后最終確認采用哪個名稱。
4、本地丟失,合并后傳入修改
產生原因:
(1)、A在主干上修改Foo.c,B在分支上將Foo.c重命名為Bar.c。
(2)、B合并A在主干上的修改。
解決:B先標記沖突解決,然后將Foo.c拷貝至本地,將A的修改合并至自己的文件中或者直接放棄A的修改,采用自己的修改。
5、本地修改,合并后傳入刪除
產生原因:
(1)、A將Foo.c重命名為Bar.c(或者將Foo.c的父目錄Foo改為Bar),B在分支上修改Foo.c。
(2)、B合并A的修改時提示該沖突。Bar.c被標記為增加,Foo.c被標記為沖突。
解決:同樣根據日志查找到修改的源頭,兩人協商后解決。
6、本地刪除,合并后傳入刪除
產生原因:
(1)、A在主干上將Foo.c重命名為Bar.c,B在分支上將Foo.c重命名為Bix.c。
(2)、B合并A的修改時會提示沖突。重命名后的文件被標記為新增,原來文件被標記為樹沖突。
解決:通過日志查找到文件被改名的時刻,兩人協商后解決。
當然當提交的時候有目錄沖突就會有tree conflicts報錯,這個時候可能你的修改已經不存在了,也就是別人修改的目錄移動的文件剛好是你修改的,這樣你就悲劇了。我也不知道恢復刪除,所以只能再做一遍,所以最好不要改動目錄結構,或者改動的時候告訴別人,讓別人又準備,否則很悲劇的
這里說解決tree conflicts的問題,解決讓后提交才是硬道理
$ svn resolve --accept working -R XXX。
其中XXX為提示沖突的目錄,tree conflicts沖突的前綴是 ?C >這個標識,然后就可以提交了。OK