svn解決沖突

之前一直在用git,現(xiàn)在工作需要svn,就學(xué)習(xí)了一下svn解決沖突的方法

對于剛接觸svn的人來說,svn沖突后,不能提交是件讓人很郁悶的事情。最讓人郁悶的事,是代碼間的覆蓋。你把我代碼蓋了,我會很火大的。誰把誰的蓋了都不爽。

為什么會出現(xiàn)代碼沖突問題呢,因為不同的人,同時修改了同一個文件的同一個地方,這個時候,他提交了,你沒有提交,你就提交不了,這個時候,你要先更新,更新就會出現(xiàn)代碼沖突問題。一般情況,要盡量避免多個人修改同一個文件,如果你改的文件是公用文件,這個時候,最好和大家勾通一下,大家都在改就不好了。

下面我說一個,通用的解決沖突的辦法,還不會覆蓋代碼,以test.php為例 :

1,修改文件后提交不了,大多是因為版本不一致造成的。更新一下,不產(chǎn)生沖突的情況,就可以提交了。

2,更新文件,如果出現(xiàn)沖突的情況,打開沖突文件test.php會看到類似以下的內(nèi)容

<<<<<<<<<<<<<<<

asdfadfadfadf

11111111111111

=======

asdfadfadfadf

111111111111111

222222222222

>>>>>>>>>>>>>>>>

結(jié)合別人修改的內(nèi)容和自己修改的內(nèi)容,然后把文件中的<<<<<,=====,>>>>>>>這類沖突符號去掉。去掉后,還是不能提交的,為什么?因為沖突時會產(chǎn)生三個文件,有這三個文件存在肯定提交不了。

客戶端用的tortoisesvn(這個估計程序員用的最多),沖突時會多產(chǎn)生,三個文件

test.php.mine?? 是沖突前自己的文件

test.php.版本號 ? 是沖突前本地的版本文件

test.php.服務(wù)器的版本號 ? 是沖突后服務(wù)器版本文件

提交的時候,把這三個文件刪除掉就可以提交了。

3,產(chǎn)生覆蓋的原因。

a),在修改沖突文件test.php時,把別人代碼都刪除掉了,只留下了自己的代碼。這樣就會產(chǎn)生覆蓋了。

b),把test.php.mine中的內(nèi)容直接copy到test.php文件,這樣也會產(chǎn)生代碼覆蓋。

上面二種情況都是我親眼看到新手這樣操作的,要避免這二種操作方法。


在使用Eclipse SVN插件進行團隊開發(fā)的過程,假設(shè)開發(fā)人員A和B都獲取了同一個文件的最新版本(假如版本號為8),并都對其進行了改動,成員A已經(jīng)提交了自己所作的改動(版本號變?yōu)?),如果此時成員B想要提交自己的改動,就極有可能與成員B已經(jīng)提交的改動產(chǎn)生沖突。

如下圖所示,在Eclipse SVN同步視圖中的Test.java就是一個產(chǎn)生了版本沖突的文件,那么我們該如何解決SVN的文件沖突呢?

1、解決簡單的文件版本沖突

對于產(chǎn)生版本沖突的文件,如果兩個人改動的不是同一處位置,例如成員A只改動了文件頭部,成員B只改動了文件的尾部,那么無需過多擔(dān)心,因為現(xiàn)在的SVN已經(jīng)非常智能,只要兩者的改動互不影響,SVN可以智能地將其合并,最后的結(jié)果就是文件頭部是A改動的結(jié)果,尾部是B改動的結(jié)果,中間保持不變。

這種情況下,我們可以直接右鍵該文件,先在關(guān)聯(lián)菜單中點擊【更新】(Update),將服務(wù)器上的改動更新到本地,然后再點擊【提交】即可。

2、解決二選一形式的文件版本沖突

經(jīng)過文件對比后,如果我們發(fā)現(xiàn)兩者改動的是同一個位置或者是同一個功能點,那么我們可能需要選擇性地保留一個,舍棄另一個。

如果舍棄的是本地文件,請右鍵單擊該文件,然后在關(guān)聯(lián)菜單中點擊【覆蓋/更新】(英文:Replace/Update),此時Eclipse將提示"是否刪除本地更改,并替換為資源庫中的文件",直接點擊【Yes】即可舍棄本地更改,并更新為資源庫中的最新版本。

如果舍棄的是資源庫中的文件,請右鍵單擊該文件,然后在關(guān)聯(lián)菜單中點擊【標(biāo)記為合并】,然后再點擊【提交】即可。

3、解決復(fù)雜的文件版本沖突

如果本地和資源庫中的文件改動都"各有所需"又"各有所棄",那么我們只能在文件對比中,一處處對比不同之處,并逐步修改為最終版本。

在修改與合并的過程中,有兩個圖標(biāo)按鈕比較重要。如下圖所示的紅色邊框標(biāo)注的兩個圖標(biāo),前者可以將右側(cè)與本地文件沒有產(chǎn)生沖突的改動復(fù)制到左側(cè)的本地文件中(比如,只有main()方法有沖突,右側(cè)的sayHi()方法沒有沖突,右側(cè)的sayHi()方法部分就會復(fù)制到左側(cè)文件相匹配的位置),后者用于將鼠標(biāo)光標(biāo)當(dāng)前所在的右側(cè)改動區(qū)域復(fù)制到左側(cè)相應(yīng)位置。

在確認(rèn)改動完成之后,同樣的點擊右鍵關(guān)聯(lián)菜單中的【標(biāo)記為合并】,然后直接【提交】即可。


以上兩篇文章出自http://www.softown.cn/post/102.html

http://blog.51yip.com/server/1071.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容