SVN沖突問題專家詳解
上節我們講到SVN沖突解決方法中手動合并沖突,本節接著上節繼續介紹SVN沖突解決方法,這里我發表一下個人理解,和大家討論討論,希望對你的學習有所幫助。下面是具體介紹。
[6]一旦你們確認了提交內容后,修改文件并且刪除沖突標志。
Toppieceofbread
Mayonnaise
Lettuce
Tomato
Provolone
Salami
Mortadella
Prosciutto
CreoleMustard
Bottompieceofbread
現在運行svnresolved,你已經準備好提交了:
$svnresolvedsandwich.txt
$svncommit-m"Goaheadandusemysandwich,discardingSally'sedits."
記住,如果你修改SVN沖突時感到混亂,你可以參考subversion生成的三個文件—包括你未作更新的文件。你也可以使用第三方的合并工具檢驗這三個文件。
拷貝覆蓋你的工作文件
如果你只是希望取消你的修改,你可以僅僅拷貝Subversion為你生成的文件替換你的工作拷貝:
$svnupdate
Csandwich.txt
Updatedtorevision2.
$lssandwich.*
sandwich.txtsandwich.txt.minesandwich.txt.r2sandwich.txt.r1
$cpsandwich.txt.r2sandwich.txt
$svnresolvedsandwich.txt
下注:使用svnrevert
如果你得到上SN沖突,經過檢查你決定取消自己的修改并且重新編輯,你可以恢復你的修改:
$svnrevertsandwich.txt
Reverted'sandwich.txt'
$lssandwich.*
sandwich.txt
注意,當你恢復一個沖突的文件時,不需要再運行svnresolved。
現在我們準備好提交修改了,注意svnresolved不像我們本章學過的其他命令一樣需要參數,在任何你認為解決了SVN沖突的時候,只需要小心運行svnresolved,—一旦刪除了臨時文件,Subversion會讓你提交這文件,即使文件中還存在沖突標記。
提交你的修改
最后!你的修改結束了,你合并了服務器上所有的修改,你準備好提交修改到版本庫。
svncommit命令發送所有的修改到版本庫,當你提交修改時,你需要提供一些描述修改的日志信息,你的信息會附到這個修訂版本上,如果信息很簡短,你可以在命令行中使用--message(-m)選項:
$svncommit--message"Correctednumberofcheeseslices."
Sendingsandwich.txt
Transmittingfiledata.
Committedrevision3.
然而,如果你把寫日志信息當作工作的一部分,你也許會希望通過告訴Subversion一個文件名得到日志信息,使用--file選項:
$svncommit--filelogmsg
Sendingsandwich.txt
Transmittingfiledata.
Committedrevision4.
如果你沒有指定--message或者--file選項,Subversion會自動地啟動你最喜歡的編輯器(見“config”一節的editor-cmd部分)來編輯日志信息。
提示
如果你使用編輯器撰寫日志信息時希望取消提交,你可以直接關掉編輯器,不要保存,如果你已經做過保存,只要簡單的刪掉所有的文本并再次保存。
$svncommit
WaitingforEmacs...Done
Logmessageunchangedornotspecified
a)bort,c)ontinue,e)dit
a$
版本庫不知道也不關心你的修改作為一個整體是否有意義,它只檢查是否有其他人修改了同一個文件,如果別人已經這樣做了,你的整個提交會失敗,并且提示你一個或多個文件已經過時了:
$svncommit--message"Addanotherrule"
Sendingrules.txt
svn:Commitfailed(detailsfollow):
svn:Outofdate:'rules.txt'intransaction'g'
此刻,你需要運行svnupdate來處理所有的合并和SVN沖突,然后再嘗試提交。
我們已經覆蓋了Subversion基本的工作周期,還有許多其它特性可以管理你得版本庫和工作拷貝,但是只使用前面介紹的命令你就可以很輕松的工作了。
[3]當然沒有任何東西是在版本庫里被刪除了—只是在版本庫的HEAD里消失了,你可以通過檢出(或者更新你的工作拷貝)你做出刪除操作的前一個修訂版本來找回所有的東西。
[4]Subversion使用內置區別引擎,缺省情況下輸出為統一區別格式。如果你期望不同的輸出格式,你可以使用--diff-cmd指定外置的區別程序,并且通過--extensions傳遞其他參數,舉個例子,察看本地文件foo.c的區別,同時忽略空格修改,你可以運行svndiff--diff-cmd/usr/bin/diff--extensions'-bc'foo.c。
[5]你也可以手工的刪除這三個臨時文件,但是當Subversion會給你做時你會自己去做嗎?我們是這樣想的。
[6]如果你向他們詢問,他們非常有理由把你帶到城外的鐵軌上。
如何降低SVN沖突解決的復雜度:
-當工作完成之后(即編寫完程序,單元測試通過)盡快的提交,頻繁的提交/更新可以降低在沖突發生的概率,以及發生時解決沖突的復雜度。
-如果沖突頻繁發生,就有必要找出原因了。
-在提交時,書寫明確的message。方便以后的查找更新的原因,畢竟隨著時光流逝,記憶也會變得模糊。本節講解SVN沖突完畢。
【編輯推薦】