【SVN多用戶開發】代碼沖突&解決辦法


SVN是一款集中式的代碼存儲工具,可以幫助多個用戶協同開發同一應用程序。

但是SVN不能完全代替人工操作,有時也需要程序員自己進行溝通確認有效的代碼。

下面就簡單的看一下,常見的代碼沖突以及解決方法。

總結起來,無非是:

  1 避免開發人員共同開發同一文件

  2 開發前需要時常更新本地代碼庫

修改同一文件不同位置引發的沖突

  首先看一下問題背景:

  樣例場景中有連個用戶:xingoo和test。他們共同開發一個程序,改程序只有一個文件,原始的代碼如下:

public void Test{
    System.out.println("Test!");
    return 1;
}

  此時用戶xingoo,修改代碼第2行,修改打印語句!

public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  用戶test,修改代碼第3行,修改返回值

public void Test{
    System.out.println("Test!");
    return 0;
}

  此時xingoo用戶先提交了代碼,當test提交代碼時,提示錯誤:

  提示用戶該文件已經過期,需要先更新文件。

  此時,SVN會自動把其他用戶修改的操作更新到該文件中(前提是不同用戶修改的位置不同),並且保存當前用戶修改的部分。

  點擊更新,更新代碼。

  觀察代碼發現,已經更新為:

public void Test{
    System.out.println("Test!xingoo");
    return 0;
}

  再次提交,提示成功:

 

  這種情況,是最簡單的代碼沖突樣例。不同用戶修改了不同位置的代碼,因此只需要在提交前進行更新,就可以解決沖突。

  那么如果用戶修改的是同一位置呢?

修改同一文件相同位置引發的沖突

  前面例子中,xingoo的代碼當前為,版本號為9:

public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  test的代碼為,版本號為10:

public void Test{
    System.out.println("Test!xingoo");
    return 0;
}

  此時test的代碼時最新版本的。

  如果此時,xingoo用戶,想要修改 return 1; 部分的代碼,提交時會發生什么呢?

  再次提交遇到錯誤:

  點擊OK后,提示更新或取消,點擊更新,更新代碼!

  再次報錯,提示:文件存在沖突!

  此時觀察文件夾發現,多了3個文件

  分別打開這3個文件:

  test.txt中的內容,該文件記錄了沖突的詳細內容,

  其中<<<<<<.mine到====之間為當前用戶修改的內容;

  ====到>>>>>.r10為版本庫中的內容:

public void Test{
    System.out.println("Test!xingoo");
<<<<<<< .mine
    return 2;
=======
    return 0;
>>>>>>> .r10
}

  test.txt.mine 記錄當前用戶修改后的文件內容快照

public void Test{
    System.out.println("Test!xingoo");
    return 2;
}

  test.txt.r9 記錄當前用戶修改前,版本庫中的內容快照

public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  test.txt.r10 記錄當前版本庫中內容快照

public void Test{
    System.out.println("Test!xingoo");
    return 0;
}

  通過這四個文件就可以很快速的發現,哪里有沖突。

  至於如何修改,這里推薦:

  直接拷貝mine文件,然后把r10文件的r10后綴去掉,進行更新。更新后,對比mine中的內容在進行修改。

  也可以直接與其他人員進行協商溝通;更新版本庫中的內容。

通過TortoiseSVN進行代碼對比

  有時候,需要對比文件的歷史修改內容,可以直接在該文件上右鍵,選擇Diff

  該操作會自動對比代碼庫中文件的內容。

通過TortoiseSVN進行版本對比

  也可以通過查看文件的歷史版本,來對比代碼:

  選擇Show log菜單

  在彈出對話框中,上面列出最近的幾個版本;可以直接雙擊下方藍色的文件名稱,就可以直接使當前文件與該版本的文件進行對比。

 

參考

  【1】《版本控制之道》

  【2】慕課網,SVN版本控制:http://www.imooc.com/learn/109


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM