SVN中多人操作同一個文件可能造成沖突,假設有兩名開發人員dev1和dev2。文檔test.txt的最新版本為33,內容如下
- 不同的用戶修改不同的行
dev1將第1行aaa修改成aa0然后提交,此時SVN服務該文件的最新版本是34
dev2 在33版本上將bbb修改成bb0
提交時報告該文件已過期
選擇Update就是將服務器上的34版本更新到本地,
更新完成,並且SVN自動完成合並,此時並沒有產生沖突,接下來可以順利提交合並后的文件。
以上是比較簡單的情形。SVN是按行比較的。如果不同的用戶在不同的
- 不同用戶在不同地方新增內容
后提交的用戶提示文件過期,要求更新,更新時又會提示合並文件沖突,要求手工修改沖突。
例如原始文件
dev1用戶修改成如下,然后提交
dev2做如下修改提交
合並時候產生沖突,SVN產生如下幾個文件
- 其中test.txt是合並后帶沖突的文件,里面增加了沖突標記
- .r41是本次修改的基版本
- .mine文件是本地文件也就是.r41+本次修改的內容
- r42是服務器最新版本
解決沖突方法1:手工合並
- 備份本次修改即.mine文件
- 撤銷本次修改執行Reverse操作,此時文件為服務器最新版本
- 將文件與備份文件比較執行Diff操作,手工修改
解決沖突方法2:在SVN中合並
其中
theirs 是服務器中最新版本,mine本地版本,merged是合並后的版本;這三個區域中紅色的區域是沖突的行,黃色的區域是沒有行號的,表示沖突之前的內容。
如果是接受theirs或者mine其中之一,執行以下操作:
如果是要合並所有更改,可以按行解決沖突,例如希望接受所有的更改,結果應該是
aa
11
bb
22
操作如下:
在第二行上右鍵執行
在第三行上執行
帶減號的行不會進入合並的內容。