svn 衝突

一、 如何產生衝突服務器

當開發人員A和開發人員B從版本庫同時檢出文檔1.txt,而A和B同時修改了1.txt的同一地方,後提交的一方會在拷貝副本中產生衝突。編輯器

兩個工做拷貝,A拷貝中文件1.txt內容爲svn

dfqerq
123dfwrepost

B拷貝中文件1.txt內容爲this

dfqerq
123erwrq3d

在B版本提交以前版本庫上的1.txt(base版本)內容爲ci

dfqerq開發

 

B拷貝先提交版本到版本庫中,以致於最新版本內容變爲文檔

dfqerq
123erwrqit

 

此時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之間是版本服務器上的版本

 

二、解決衝突

第一種,利用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解決衝突

一、利用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')

 

二、手工修改1.txt文件,而後將當前拷貝即1.txt做爲最後提交的版本

svn resolve --accept working 1.txt

三、svn resolve --accept theirs-full 1.txt 使用1.txt.rNew做爲最後提交的版本

四、svn resolve --accept mine-full 1.txt 使用1.txt.mine做爲最後提交的版本

五、svn resolve --accept mine-conflict 1.txt 使用1.txt.mine的衝突部分做爲最後提交的版本

五、svn resolve --accept theirs-conflict 1.txt 使用1.txt.rNew的衝突部分做爲最後提交的版本

 

第三種,使用svn revert取消變動

相關文章
相關標籤/搜索