新聞中心
本節(jié)和大家一起學(xué)習(xí)一下SVN文件沖突和樹沖突,主要包括SVN文件沖突和樹沖突如何出現(xiàn),以及怎樣解決這些沖突,希望通過本文的學(xué)習(xí)大家能夠掌握住這些方法。
解決沖突
偶爾,當(dāng)你從版本庫更新、合并文件時(shí),或者切換工作副本至一個(gè)不同的URL時(shí)你會(huì)遇到?jīng)_突。有兩種沖突:
SVN文件沖突
當(dāng)兩名(或更多)開發(fā)人員修改了同一個(gè)文件中相鄰或相同的行時(shí)就會(huì)發(fā)生文件沖突。
SVN樹沖突
當(dāng)一名開發(fā)人員移動(dòng)、重命名、刪除一個(gè)文件或文件夾,而另一名開發(fā)人員也對它們進(jìn)行了移動(dòng)、重命名、刪除或者僅僅是修改時(shí)就會(huì)發(fā)生樹沖突。
SVN文件沖突
當(dāng)兩名或更多開發(fā)人員修改了同一個(gè)文件中相鄰或相同的行時(shí)就會(huì)發(fā)生文件沖突。由于Subversion不知道你的項(xiàng)目的具體情況,它把解決沖突的工作留給了開發(fā)人員。一旦出現(xiàn)沖突,你就應(yīng)該打開有問題的文件,查找以字符串<<<<<<<開頭的行。有沖突的區(qū)域用如下的方式標(biāo)記:
<<<<<<<文件名你的修改=======合并自版本庫中的代碼>>>>>>>版本
對于每個(gè)沖突的文件Subversion在你的目錄下放置了三個(gè)文件:
文件名.ext.mine
這是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是說,沒有沖突標(biāo)志。這個(gè)文件除了你的***修改外沒有別的東西。
文件名.ext.r舊版本
這是在你更新你的工作副本之前的基礎(chǔ)版本(BASErevision)文件。也就是說,它是在你做***修改之前所檢出的文件。
文件名.ext.r新版本
這個(gè)文件是當(dāng)你更新你的工作副本時(shí),你的Subversion客戶端從服務(wù)器接收到的。這個(gè)文件對應(yīng)于版本庫中的***版本。
你可以通過TortoiseSVN→編輯沖突運(yùn)行外部合并工具/沖突編輯器,或者你可以使用任何別的編輯器手動(dòng)解決沖突。你需要沖定哪些代碼是需要的,做一些必要的修改然后保存。
然后,執(zhí)行命令TortoiseSVN→已解決并提交人的修改到版本庫。需要注意的是已解決命令并不是真正的解決了沖突,它只是刪除了filename.ext.mine和filename.ext.r*兩個(gè)文件,允許你提交修改。
如果你有二進(jìn)制SVN文件沖突,Subversion不會(huì)試圖合并文件。本地文件保持不變(完全是你***修改時(shí)的樣子),但你會(huì)看到filename.ext.r*文件。如果你要撤消你的修改,保留版本庫中的版本,請使用還原(Revert)命令。如果你要保持你的版本覆蓋版本庫中的版本,使用已解決命令,然后提交你的版本。
你可以右擊父文件夾,選擇TortoiseSVN→已解決...,使用“已解決”命令來解決多個(gè)文件。這個(gè)操作會(huì)出現(xiàn)一個(gè)對話框,列出文件夾下所有有沖突的文件,你可以選擇將哪些標(biāo)記成已解決。
樹沖突
當(dāng)一名開發(fā)人員移動(dòng)、重命名、刪除一個(gè)文件或文件夾,而另一名開發(fā)人員也對它們進(jìn)行了移動(dòng)、重命名、刪除或者僅僅是修改時(shí)就會(huì)發(fā)生樹沖突。有很多種不同的情形可以導(dǎo)致樹沖突,而且不同的情形需要不同的步驟來解決沖突。
當(dāng)一個(gè)文件通過Subversion在本機(jī)刪除后,文件也從本機(jī)文件系統(tǒng)中刪除。因此即使它是樹沖突的一部分,卻既不能顯示沖突的疊加圖標(biāo)也不能通過右鍵單擊來解決沖突。使用檢查修改對話框來獲得編輯沖突選項(xiàng)。
TortoiseSVN能夠協(xié)助找到合并更改的正確位置,但是需要作一些額外的工作來整理沖突。請牢記:當(dāng)進(jìn)行一次更新操作后,工作副本的基礎(chǔ)文件將會(huì)包括每一個(gè)項(xiàng)目在執(zhí)行更新操作時(shí)版本庫中的版本。如果你在進(jìn)行更新后再撤銷更改,工作副本將返回到版本庫的狀態(tài),而不是你開始進(jìn)行更改前的狀態(tài)。
本地刪除,當(dāng)更新時(shí)有更改進(jìn)入開發(fā)人員A修改Foo.c并將其提交至版本庫中
開發(fā)人員B同時(shí)在他的工作副本中將文件Foo.c改名為Bar.c,或者僅僅是刪除了Foo.c或它的父文件夾。
更新開發(fā)人員B的工作副本會(huì)導(dǎo)致樹沖突:
在工作副本中,F(xiàn)oo.c被刪除了,但是被標(biāo)記為樹沖突。
如果沖突是由于更改文件名引起的而不是刪除文件引起的,那么Bar.c被標(biāo)記為添加,但是其中卻不包括開發(fā)人員A修改的內(nèi)容。
開發(fā)人員B現(xiàn)在必須做出選擇是否保留開發(fā)人員A的更改。在更改文件名的案例中,他可以將Foo.c的更改合并到改名后的文件Bar.c中去。對于刪除文件或文件夾的案例中,他可以選擇保留包含開發(fā)人員A更改內(nèi)容的項(xiàng)目并放棄刪除操作。或什么也不做而直接將沖突標(biāo)記為已解決,那樣他實(shí)際上丟棄了開發(fā)人員A的更改。
如果TortoiseSVN能夠找到被改名為Bar.c的原始文件,沖突編輯對話框?qū)⒖梢院喜⒏?。這取決于在什么地方調(diào)用更新操作,它也許不能找到原始文件。
本地更改,當(dāng)更新時(shí)有刪除進(jìn)入開發(fā)人員A將文件Foo.c改名為Bar.c并將其提交至版本庫中。
開發(fā)人員B在他的工作副本中修改文件Foo.c?;蛘咴谝粋€(gè)文件夾改名的案例中...
開發(fā)人員A將父文件夾FooFolder改名為BarFolder并將其提交至版本庫中。
開發(fā)人員B在他的工作副本中修改文件Foo.c。
更新開發(fā)人員B的工作副本會(huì)導(dǎo)致樹沖突。對于一個(gè)簡單的SVN文件沖突:
Bar.c被當(dāng)作一個(gè)正常文件添加到工作副本中。
Foo.c被標(biāo)記為添加(包括其歷史記錄)并且產(chǎn)生樹沖突。
對于一個(gè)文件夾沖突:
BarFolder被當(dāng)作一個(gè)正常文件夾添加到工作副本中。
FooFolder被標(biāo)記為添加(包括其歷史記錄)并且產(chǎn)生樹沖突。
Foo.c被標(biāo)記為已修改。
開發(fā)人員B現(xiàn)在需要做出決定是否接受開發(fā)人員A作出的結(jié)構(gòu)改變并且合并她的更改到新結(jié)構(gòu)下適當(dāng)?shù)奈募?,或者直接放棄開發(fā)人員A的更改并保留本地文件。
要合并她的本機(jī)更改到新布局中,開發(fā)人員B必須先找出沖突的文件Foo.c經(jīng)過改名/移動(dòng)后在版本庫中的新文件名是什么??梢允褂萌罩緦υ捒騺硗瓿蛇@個(gè)任務(wù)。更改必須要手工合并,因?yàn)闆]有辦法自動(dòng)的或者簡單的完成此操作。一旦更改移植完畢,沖突的路徑就是多余的并且可以刪除。在此案例中,使用沖突編輯對話框中的刪除按鈕進(jìn)行清理并將沖突標(biāo)記為已解決。
如果開發(fā)人員B認(rèn)為A的更改是錯(cuò)誤的,那么在沖突編輯對話框中她必須選擇保留按鈕。這樣就會(huì)標(biāo)記沖突的文件/文件夾為已解決,但是需要手工刪除開發(fā)人員A的更改。又是通過日志對話框幫助追蹤哪些文件移動(dòng)了。請期待下節(jié)SVN文件沖突和樹沖突問題講解。

成都創(chuàng)新互聯(lián)公司長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為五家渠企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),五家渠網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
【編輯推薦】
- 揭開SVN沖突神秘面紗
- SVN沖突解決方法大全
- SVN沖突解決方法名師介紹
- SVN沖突問題專家詳解
- SVN服務(wù)器安裝指導(dǎo)手冊
網(wǎng)站標(biāo)題:詳解SVN文件沖突和樹沖突解決方法
文章位置:http://m.5511xx.com/article/djspsgc.html


咨詢
建站咨詢
