SVN沖突解決方法名師介紹
本節向大家講解一下SVN沖突的解決方法,在這里和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西,歡迎打擊一起來學習SVN沖突方面的知識。
本人使用SVN的時間不是很長,在使用之前也僅僅是粗淺的了解過這個軟件。從今年的8月份開始,由于一個項目使用Eclipse3.1,跨地域的開發,為了適應不同的開發人員處于不同的地理位置,因此我們使用SVN作為團隊開發的管理工具。開始使用時,僅僅是邊學邊用,遇到不懂的地方再去查找資料。今天由于有點時間,先把合并過程遇到的沖突問題詳細了解一下。
可以使用svnstatus-u命令來查看一下某個問題是否會有沖突發生。在使用svnupdate的時候,會出現如下一些信息:
$svnupdate
UINSTALL
GREADME
Cbar.c
Updatedtorevision46.
那么,U開頭的信息提示你,這個文件在你本地沒有修改過,文件已經根據版本庫的新版本更新了。G開頭的信息提示你,這個文件在你本地已經修改過,但是和版本庫中對應的版本并沒有沖突的地方,svn已經合并更新了。而C開頭的信息提示你,這個文件有點麻煩,你在本地的修改和版本庫中的版本修改的地方重疊了,也就是說,你修改了某一行,你的同事也修改了同一行。這個就需要你自己手工去解決了。當沖突發生時,要注意到有三件事情可以幫助你解決問題。
a.Subversion會給這個文件作出c標記。
b.如果Subversion認為這個文件時可以合并的,它會一個沖突標記(特殊的橫線來分開沖突的代碼塊)
c.對每一個沖突的文件,Subversion放置三個額外的未版本化文件到你的工作拷貝。
filename.mine
你更新前的文件,沒有SVN沖突標志,只是你***更改的內容。(如果這個文件不可以合并,.mine文件不會創建,因為它和工作文件相同。)
filename.rOLDREV
這個是你做更新操作以前的BASE版本,就是你在上次更新之后未作更改的版本。
filename.rNEWREV
這是Subversion從服務器剛剛收到的版本。這個版本就是版本庫的HEAD版本。
例如,如果sally修改了一個文件sandwich.txt,而harry也剛剛修改了這個文件的相同位置并提交到服務器。那么sally在做這個文件的update操作的時候會得到三個額外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的時候會遭到服務器的拒絕,因為這個文件的沖突問題還沒有得到解決。要解決這個沖突,可以選擇:
a.手工合并SVN沖突文件(檢查和修改文件中的沖突標志)。
b.用一個臨時文件(三個中的一個)覆蓋你的工作文件。
c.運行svnrevert<filename>來放棄所有的修改。
一旦解決了你的沖突,需要通過命令svnresolved讓subversion知道并刪除三個臨時文件。這時才可以提交。
下面再說說手工合并SVN沖突。開始的時候讓人覺得害怕,但做一段時間之后,就覺得不那么煩人了。
看看如下文本:
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
GrilledChicken
>>>>>>>.r2
CreoleMustard一連串的大于、小于、等于號是SVN沖突標記,這些數據得全部刪除才可以提交。其中,
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======是你在沖突區里面做的修改。
Sauerkraut
GrilledChicken
>>>>>>>.r2
是別人在沖突區做的修改。
在SVN沖突區中,或許你需要和你的同事溝通來安排沖突區的文本內容,如果是程序代碼,你需要和同事商量一下,中間的這段代碼到底應該是什么樣子的。
所有沖突區得到合理的解決之后,你就可以提交你的文件了。
【編輯推薦】