之前一直在用git坚冀,現(xiàn)在工作需要svn,就學習了一下svn解決沖突的方法
對于剛接觸svn的人來說塘娶,svn沖突后,不能提交是件讓人很郁悶的事情痊夭。最讓人郁悶的事刁岸,是代碼間的覆蓋。你把我代碼蓋了她我,我會很火大的虹曙。誰把誰的蓋了都不爽。
為什么會出現(xiàn)代碼沖突問題呢番舆,因為不同的人酝碳,同時修改了同一個文件的同一個地方,這個時候恨狈,他提交了疏哗,你沒有提交,你就提交不了禾怠,這個時候返奉,你要先更新,更新就會出現(xiàn)代碼沖突問題吗氏。一般情況衡瓶,要盡量避免多個人修改同一個文件,如果你改的文件是公用文件牲证,這個時候哮针,最好和大家勾通一下,大家都在改就不好了。
下面我說一個十厢,通用的解決沖突的辦法等太,還不會覆蓋代碼,以test.php為例 :
1蛮放,修改文件后提交不了缩抡,大多是因為版本不一致造成的。更新一下包颁,不產(chǎn)生沖突的情況瞻想,就可以提交了。
2娩嚼,更新文件蘑险,如果出現(xiàn)沖突的情況,打開沖突文件test.php會看到類似以下的內容
<<<<<<<<<<<<<<<
asdfadfadfadf
11111111111111
=======
asdfadfadfadf
111111111111111
222222222222
>>>>>>>>>>>>>>>>
結合別人修改的內容和自己修改的內容岳悟,然后把文件中的<<<<<,=====,>>>>>>>這類沖突符號去掉佃迄。去掉后,還是不能提交的贵少,為什么呵俏?因為沖突時會產(chǎn)生三個文件,有這三個文件存在肯定提交不了滔灶。
客戶端用的tortoisesvn(這個估計程序員用的最多)普碎,沖突時會多產(chǎn)生,三個文件
test.php.mine?? 是沖突前自己的文件
test.php.版本號 ? 是沖突前本地的版本文件
test.php.服務器的版本號 ? 是沖突后服務器版本文件
提交的時候录平,把這三個文件刪除掉就可以提交了麻车。
3,產(chǎn)生覆蓋的原因萄涯。
a)绪氛,在修改沖突文件test.php時唆鸡,把別人代碼都刪除掉了涝影,只留下了自己的代碼。這樣就會產(chǎn)生覆蓋了争占。
b)燃逻,把test.php.mine中的內容直接copy到test.php文件,這樣也會產(chǎn)生代碼覆蓋臂痕。
上面二種情況都是我親眼看到新手這樣操作的伯襟,要避免這二種操作方法。
在使用Eclipse SVN插件進行團隊開發(fā)的過程握童,假設開發(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只改動了文件的尾部喊递,那么無需過多擔心随闪,因為現(xiàn)在的SVN已經(jīng)非常智能,只要兩者的改動互不影響册舞,SVN可以智能地將其合并蕴掏,最后的結果就是文件頭部是A改動的結果,尾部是B改動的結果调鲸,中間保持不變盛杰。
這種情況下,我們可以直接右鍵該文件藐石,先在關聯(lián)菜單中點擊【更新】(Update)即供,將服務器上的改動更新到本地,然后再點擊【提交】即可于微。
2逗嫡、解決二選一形式的文件版本沖突
經(jīng)過文件對比后,如果我們發(fā)現(xiàn)兩者改動的是同一個位置或者是同一個功能點株依,那么我們可能需要選擇性地保留一個驱证,舍棄另一個。
如果舍棄的是本地文件恋腕,請右鍵單擊該文件抹锄,然后在關聯(lián)菜單中點擊【覆蓋/更新】(英文:Replace/Update),此時Eclipse將提示"是否刪除本地更改荠藤,并替換為資源庫中的文件"伙单,直接點擊【Yes】即可舍棄本地更改,并更新為資源庫中的最新版本哈肖。
如果舍棄的是資源庫中的文件吻育,請右鍵單擊該文件,然后在關聯(lián)菜單中點擊【標記為合并】淤井,然后再點擊【提交】即可布疼。
3摊趾、解決復雜的文件版本沖突
如果本地和資源庫中的文件改動都"各有所需"又"各有所棄",那么我們只能在文件對比中游两,一處處對比不同之處严就,并逐步修改為最終版本。
在修改與合并的過程中器罐,有兩個圖標按鈕比較重要梢为。如下圖所示的紅色邊框標注的兩個圖標,前者可以將右側與本地文件沒有產(chǎn)生沖突的改動復制到左側的本地文件中(比如轰坊,只有main()方法有沖突铸董,右側的sayHi()方法沒有沖突,右側的sayHi()方法部分就會復制到左側文件相匹配的位置)肴沫,后者用于將鼠標光標當前所在的右側改動區(qū)域復制到左側相應位置粟害。
在確認改動完成之后,同樣的點擊右鍵關聯(lián)菜單中的【標記為合并】颤芬,然后直接【提交】即可悲幅。
以上兩篇文章出自http://www.softown.cn/post/102.html
http://blog.51yip.com/server/1071.html