1. 程式人生 > >SVN多使用者開發程式碼衝突的解決辦法

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

 

本文轉自 :https://www.cnblogs.com/xing901022/p/4402686.html  如有侵權,請博主告知刪除