之前對SVN不熟悉,一碰到沖突就怕得要死,不知道應該怎么處理。今天必須要正視這個問題,研究一下。
一、沖突
SVN非常智能,它不像VSS那樣,一個人在改的時候必須以獨占的方式簽出文件,導致其他人不能夠修改。而是允許多個人同時修改一個文件。這就大大減少了資源競爭的問題,之前用VSS經常要問同事:"改完沒,簽入一下"。
1、沖突是如何發生的
- 兩個人修改了不同文件?不會有沖突,因為它們並不相關。
- 兩個人同時修改了同一個文件的不同位置?不會有沖突,SVN很好地解決了這個問題。
- 兩個人同時修改了同一個文件的相同位置?這個時候會產生沖突。
情景:工程師A修改了a.txt的第一行,提交了。工程師B也修改了a.txt的第一行,然后上傳,這時SVN會提示存在沖突。
我們來重現一次這樣的情景。首先,我們創建3個文件夾,一個服務端,兩個客戶端。SVN關聯它們。然后上傳1個a.txt上去。
同時在兩個文件夾,打開並修改a.txt文件。

修改完畢后,文件夾提示有文件未上傳:

上傳client1,沒問題,直接變綠。但是當上傳client2的時候,SVN提示a.txt文件過期。

這時,重新獲取client2文件夾,如果此時SVN發現a.txt文件修改的不是同一行,那么也沒問題了,但是很遺憾,這里我們修改的都是兩個文件夾的第一行。
SVN提示沖突,文件夾變成“黃色嘆號”。

2、沖突的解決
我們選擇編輯沖突:

此時,在一側上右鍵會有如下選擇項供我們選擇:

1、Use this text block:使用此文本塊;
2、Use this whole file:使用這個文件;
3、Use text block from 'mine' before 'theirs':合並,將我的改動放在別人的改動之前;
4、Use text block from 'theids' before 'mine':合並,將別人的改動放在我的改動之前;
以上4個選項,點擊之后就會在最下面的TextArea看到最終效果,選擇想要的版本就OK了。
如果是一個個處理,可以選擇跳轉到上一個/下一個沖突地方:

完事了,標記為已解決沖突就OK了。

二、SVN忽略文件
在項目中,有些文件可能是不需要SVN管理的,因為有些文件可能每次生成都會改變,例如bin目錄。可以考慮將這些目錄從SVN管理中忽略掉,就不用每次Comit都更新這些文件。其操作方式如下:
1、在SVN中忽略某文件:

2、忽略后,如果提交,此時服務器端會刪除掉該文件,其圖標顯示如下:

3、如果又想將已經忽略的文件添加回來:

通常來說,一個.Net的Web項目,如下文件夾是不需要添加到SVN管理的:
- bin文件夾;
- obj文件夾;
- *.user文件;
- .suo文件;
