解決版本衝突
1、 如何產生衝突
當開發人員A和開發人員B從版本庫同時檢出文件1.txt,而A和B同時修改了1.txt的同一地方,後提交的一方會在拷貝副本中產生衝突。
兩個工作拷貝,A拷貝中檔案1.txt內容為
dfqerq
123dfwre
B拷貝中檔案1.txt內容為
dfqerq
123erwrq
在B版本提交之前版本庫上的1.txt(base版本)內容為
dfqerq
B拷貝先提交版本到版本庫中,以至於最新版本內容變為
dfqerq
123erwrq
此時A版本也提交則會產生衝突,無法提交,需要先svn update,此時會在A拷貝中產生三個臨時檔案1.txt.rNew\1.txt.rOld\1.txt.mine,其中1.txt.rNew是最新版 本,1.txt.rOld是base版本,1.txt.mine是A作者修改後的版本,在此例中內容為
dfqerq
123dfwre
而update之後A拷貝中的1.txt內容為
<<<<<<< .mine
dfqerq
123dfwre=======
dfqerq
123erwrq>>>>>>> .r18
其中<<<<<<< .mine與=======之間表示A修改後的內容,=======與>>>>>>> .r18之間是版本伺服器上的版本
2、解決衝突
第一種,利用update的選項進行衝突解決,也就是說不管當前拷貝副本是否是最新版本,都使用—accept引數作為衝突處理方式
–accept ARG : specify automatic conflict resolution action
(‘postpone’, ‘base’, ‘mine-conflict’,
‘theirs-conflict’, ‘mine-full’, ‘theirs-full’,
‘edit’, ‘launch’)
(p) postpone – mark the conflict to be resolved later //讓檔案在更新完成之後保持衝突狀態。
(df) diff-full – show all changes made to merged file //使用標準區別格式顯示base修訂版本和衝突檔案本身的區別。
(e) edit – change merged file in an editor //用你喜歡的編輯器開啟衝突的檔案,編輯器是環境變數EDITOR設定的。
(r) resolved – accept merged version of file //完成檔案編輯之後,通知svn你已經解決了檔案的衝突,它必須接受當前的內容—從本質上講就是你已經“解決了”衝突。
(mf) mine-full – accept my version of entire file (ignore their change//丟棄新從伺服器接收的變更,並只使用你檢視檔案的本地修改。
(tf) theirs-full – accept their version of entire file (lose my changes)//丟棄你對檢視檔案的本地修改,只使用從伺服器新接收的變更。
(l) launch – launch external tool to resolve conflict//啟動一個外接程式來執行衝突解決,這需要一些預先的準備。
(h) help – show this list //顯示所有在衝突解決時可能使用的命令。
第二種,在update時並不處理衝突,利用svn resolve解決衝突
1、利用svn resolve –accept base選擇base版本,即1.txt.rOld作為最後提交的版本
–accept ARG : specify automatic conflict resolution source
(‘base’, ‘working’, ‘mine-conflict’,
‘theirs-conflict’, ‘mine-full’, ‘theirs-full’)
2、手工修改1.txt檔案,然後將當前拷貝即1.txt作為最後提交的版本
svn resolve –accept working 1.txt
3、svn resolve –accept theirs-full 1.txt 使用1.txt.rNew作為最後提交的版本
4、svn resolve –accept mine-full 1.txt 使用1.txt.mine作為最後提交的版本
5、svn resolve –accept mine-conflict 1.txt 使用1.txt.mine的衝突部分作為最後提交的版本
5、svn resolve –accept theirs-conflict 1.txt 使用1.txt.rNew的衝突部分作為最後提交的版本
第三種,使用svn revert取消變更
(以上文章來源:http://blog.sina.com.cn/s/blog_65fd4c1e0100h2cg.html)
-----
前兩天在解決衝突時用到了svn resolve這個命令,找到這篇文章主要是因為他對–accept引數的說明比較全
比官方的文件更詳細。