1. 程式人生 > >衝突及解決方案

衝突及解決方案

1. 本地檔案過期
如果版本庫中的某一檔案已經改變了(另一個working copy 執行提交)。但是修改的部分(如只修改第一行)

和我本地的程式碼(如只是修改了第二行)不一致但是並不衝突。不過執行提交會報過期錯誤:

   E:\work\sesame>svn commit -m "1 line welcome to hello"

        Sending        huanying.txt 

        svn: E155011: Commit failed (details follow): 

        svn: E155011: File 'E:\work\sesame\huanying.txt' is out of date 

        svn: E160028: File '/sesame/trunk/huanying.txt' is out of date
2、所以使用更新操作(因為不衝突,所以可以照常更新)
    E:\work\sesame>svn update 

        Updating '.': 

        G    huanying.txt 

        Updated to revision 7. 

其中

A新增
D刪除
U更新
C衝突
G合併

2. 衝突
1、兩個客戶端有相同的程式碼庫中的某一個程式碼檔案。
一個客戶端修改一行程式碼, 首先提交程式碼,版本庫更新了。另一個客戶端不修改這行程式碼也提交,即程式碼出現衝突。
svn將拒絕執行這樣的提交。     理由:版本庫中已經有這個版本的副本了。當然重複提交是不被允許的。(注:修改提交的註釋再提交,也不行。)
  e:\work\sesame>svn commit -m "I am sesame a" huanying.txt

    Sending        huanying.txt
    svn: E155011: Commit failed (details follow):
    svn: E155011: File 'E:\work\sesame\huanying.txt' is out of dat
    svn: E160028: File '/sesame/trunk/huanying.txt' is out of date
然後使用更新,他會報出衝突解決方案。
e:\work\sesame>svn update
Updating '.':
Conflict discovered in 'E:/work/sesame/huanying.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: tc
G    huanying.txt
Updated to revision 11.
其中p 表示延後解決,這樣會產生4個檔案(huanying.txt  huanying.txt.mine  huanying.txt.r10  huanying.txt.r11)
df 控制檯顯示衝突資訊,和使用diff命令一樣
e 直接用系統預設的Editor修改衝突 mc 使用自己的檔案,然後使用 svn resolved huangying.txt 告訴倉庫我已經解決衝突,可以隨後提交
tc 使用倉庫中檔案,將本地檔案同步更新
注意:此時本地工作拷貝雖然版本和倉庫的版本同步,但是修改的檔案內容卻可以不一致,因為本地檔案經過人手工修改。最後執行了提交語句,這樣就上傳到了程式碼庫中,並將版本號增加一。 其它選項參照:http://ariejan.net/2007/07/04/how-to-resolve-subversion-conflicts/

2、svn log -r4 welcome.txt         將顯示日誌,便於我來修改衝突。
3、手動修改了衝突之後,     告知svn我們已經解決了衝突
  svn resolved welcome.txt
   然後提交 
 svn commit -m "comment"
4、如果修改了本地的檔案,同時又要刪除本地的檔案,可以進行還原。
E:\work\sanother\trunk>svn del welcome.txt

    svn: E195006: Use --force to override this restriction (local modifications may be lost)
    svn: E195006: 'E:\work\sanother\trunk\welcome.txt' has local modifications -- commit or revert them first 

E:\work\sanother\trunk>svn revert welcome.txt

    Reverted 'welcome.txt'