subversion衝突解決

可以使用svn status -u命令來查看一下某個問題是否會有衝突發生。在使用svn update 的時候,會出現如下一些信息:
$ svn update
U INSTALL
G README
C bar.c
Updated to revision 46.

那麼,U 開頭的信息提示你,這個文件在你本地沒有修改過,文件已經根據版本庫的新版本更新了。G 開頭的信息提示你,這個文件在你本地已經修改過,但是和版本庫中對應的版本並沒有衝突的地方,svn已經合併更新了。而C 開頭的信息提示你,這個文件有點麻煩,你在本地的修改和版本庫中的版本修改的地方重疊了,也就是說,你修改了某一行,你的同事也修改了同一行。這個就需要你自己手工去解決了。當衝突發生時,要注意到有三件事情可以幫助你解決問題。
          a.Subversion會給這個文件作出c標記。
          b.如果Subversion認爲這個文件時可以合併的,它會一個衝突標記(特殊的橫線來分開衝突的代碼塊)
          c.對每一個衝突的文件,Subversion放置三個額外的未版本化文件到你的工作拷貝。

filename.mine
     你更新前的文件,沒有衝突標誌,只是你最新更改的內容。(如果這個文件不可以合併,.mine文件不會創建,因爲它和工作文件相同。)

filename.rOLDREV
     這個是你做更新操作以前的BASE版本,就是你在上次更新之後未作更改的版本。

filename.rNEWREV
       這是Subversion從服務器剛剛收到的版本。這個版本就是版本庫的HEAD版本。


例如,如果sally修改了一個文件sandwich.txt, 而harry也剛剛修改了這個文件的相同位置並提交到服務器。那麼sally在做這個文件的update操作的時候會得到三個額外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。並且在提交的時候會遭到服務器的拒絕,因爲這個文件的衝突問題還沒有得到解決。要解決這個衝突,可以選擇:
          a. 手工合併衝突文件(檢查和修改文件中的衝突標誌)。
          b.用一個臨時文件(三個中的一個)覆蓋你的工作文件。
          c.運行svn revert <filename>來放棄所有的修改。

一旦解決了你的衝突,需要通過命令svn resolved讓subversion知道並刪除三個臨時文件。這時纔可以提交。

下面再說說手工合併衝突。開始的時候讓人覺得害怕,但做一段時間之後,就覺得不那麼煩人了。

看看如下文本:
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard


<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
是你在衝突區裏面做的修改。

Sauerkraut
Grilled Chicken
>>>>>>> .r2
是別人在衝突區做的修改。

在衝突區中,或許你需要和你的同事溝通來安排衝突區的文本內容,如果是程序代碼,你需要和同事商量一下,中間的這段代碼到底應該是什麼樣子的。

所有衝突區得到合理的解決之後,你就可以提交你的文件了。


一連串的大於、小於、等於號是衝突標記,這些數據得全部刪除纔可以提交。其中,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章