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 如有侵權,請博主告知刪除