SVN的使用、分支合並及解決沖突詳解


一、什么是SVN

SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它采用了分支管理系統,它的設計目標就是取代CVS。

二、SVN的下載安裝

下載地址:https://tortoisesvn.net/downloads.zh.html

安裝完不要忘記重啟電腦

安裝完成后,按下鼠標右鍵,會看到如下界面:

說明SVN已經安裝成功了。

三、SVN的常用操作

1、遷出配置庫內容(SVN Checkout)

    1)新建或進入目錄下(比如E盤),右鍵 →SVN Checkout

    2)URL of repository 填寫倉庫路徑即可 

 3)Revision處,“HEAD revision”是指最新版,也可以指定Revision為任意一個版本。

    4)點擊“OK”按鈕后,在彈出的對話框中輸入用戶名和密碼,驗證成功后,項目文件開始從遠程服務器下載到本地工作目錄中:

5)點擊“確定”按鈕后,即可獲取完成,出現如下下載界面:

  6)下載完成后,服務器上所有內容會出現在本地文件夾下

2、更新文件(SVN Update)

    1)當從配置庫遷出相應目錄后,他人對服務器上此目錄內容進行了修改,則需要再次獲取改動內容到本地目錄的過程稱為更新。更新可以針對一個文件、幾個選中的文件或者整個文件目錄。

       選中要被更新的文件,右鍵選擇“SVN Update”項,如下:

   

  2)點擊“SVN Update”后會彈出窗口顯示更新的進度,如下:

    若上述框中的有文件出現亮紅,說明來自配置庫的內容與你本地修改內容合並時出現了沖突

   

3、提交更新(SVN Commit)

    1)本地文件修改后,若是需要更新到服務器上,則需要提交(Commit)最新的更新。

  Commit的作用是將本地最新修改的文件同步到SVN服務端,供其他人來參考或者使用,當然使用之前,要先Update一下,來確保是最新的,在修改文件上擊右鍵,出現菜單,選擇“SVN Commit…”,如下:

  2)然后填寫關於本次更新的日志(log message),這是必填項,否則commit會失敗,如下:

  3)當出現下圖所示提示框,則表明剛剛的修改已成功提交,並且當前的SVN版本號加1。

4、增加文件(Add)

    1)將需要增加的新文件放入到本地遷出的文件夾TestManger目錄的相應位置中,鼠標選中新文件右鍵選擇“Tortoise SVN”的“Add”項,如下圖所示:

    2)鼠標選中TestManger文件夾右鍵選擇“SVN Commit…”,將新文件上傳配置庫對應文件夾中(若只上傳單個文件,只需點中單個文件上傳即可)。

5、檢查更新(Check for modifications)

    1)此功能可以顯示本地對文件所做的修改有哪些還沒有提交。不光能看到對文件的修改變化,還包括增加文件或目錄,刪除文件或目錄,移動文件或目錄等。當他人提交了哪些文件的改動,也可通過此項來進行查詢。

6、刪除文件(Delete)

    1)選中要被刪除的文件,右鍵選擇“Tortoise SVN”的“Delete”項,如下:

    2)刪除文件后,鼠標選中TestManger文件夾右鍵選擇“SVN Commit…”項進行提交,提交方式同增加文件的提交方式,提交后則將新文件從配置庫中刪除。

7、撤銷更改(Revert)

在修改了某些文件后(文件未上傳到配置庫),需要返回到修改前的狀態,則選中文件夾右鍵選擇“Tortoise SVN”的“Revert...”項進行撤銷,本地硬盤上的文件將恢復到修改前的內容,修改的內容將被刪除。

8、鎖定和解鎖(Get lock and Release lock)

當項目需要時可以在本地硬盤中將遷出的內容進行鎖定,選中要被鎖定的文件右鍵選擇“Tortoise SVN”的“Get lock...”項進行鎖定(鎖定后他人將無法修改此文件),系統彈出鎖定信息框。   當文本文件鎖定后,需要通過解鎖他人才能繼續對文件進行修改。

選中被鎖定的文件右鍵選擇“Tortoise SVN”的“Release lock…”項進行解鎖。

9、重命名文件(Rename

修改文件名,選中需要重命名的文件或文件夾,然后右鍵“Tortoise SVN”的“Rename”,在彈出的對話框中輸入新名稱,點擊“OK”按鈕,並將修改文件名后的文件或文件夾“SVN Commit…”提交到SVN服務器上。

10、獲取歷史文件(Show log)

Show log顧名思義是顯示日志的作用,主要是顯示該文件或者該目錄被執行的操作,是被誰修改了,以及修改的時間和日期。鼠標選中文件夾右鍵選擇“Tortoise SVN”的“Show log”項,系統彈出此路徑下的所有文件版本信息,如下:

四、SVN的分支合並及沖突的解決方法

1)svn多分支合並主干方法

分支a合並到本地主干后,本地主干提交代碼到svn主干,這時主干版本改變,分支b再提交代碼到主干會報沖突,版本不統一,這時的解決辦法是:
方法1.將主干代碼合並到分支b,提交分支b代碼到主干即可。
方法2.將分支b代碼合並到分支a,提交分支a代碼到主干即可。
總之,要避免主干提交后,主干和另一分支的版本沖突問題即可。

2)svn多分支合並主干沖突:svn Working copy and merge source not ready for reintegration

猜測原因:分支主干版本不一致,導致同一文件被認為是不同文件,所以無法合並(A,B兩文件合並時也報此錯)

解決方法:

分支合並主干產生沖突問題: svn Working copy and merge source not ready for reintegration

原文地址:http://heisetoufa.iteye.com/blog/1736189

錯誤信息 

Working copy and merge source not ready for reintegration 
svn: 'svn://xxx/TestImpl.java@4530' must be ancestrally related to 'svn://xxx/TestImpl.java@4394'
    Merge completed abnormally.
在使用svn的merge過程中,遇到了N多的麻煩
這次遇到的麻煩的具體表現為: 
在主干合並分支中的代碼,報錯
解決辦法為: 
假如需要合並的文件名為:TestImpl.java 
1.在主干的文件上,右鍵->Team->Copy->選擇分支的路徑->OK. 
2.到分支的文件夾中找到新copy進來的文件,就是Copy Of TestImpl.java 
3.把分支的TestImpl.java改名為TestImpl2.java 
4.把Copy Of TestImpl.java改名為TestImpl.java 
5.把TestImpl2.java的內容全部覆蓋掉TestImpl.java中的內容 
6.把TestImpl.java文件名中的TestImpl2全部改為TestImpl 
7.刪除Copy Of TestImpl.java 
8.提交分支的TestImpl.java 
9.在主干的TestImpl.java上進行合並.這個時候svn就不報錯了,可以正常的合並代碼了 

這個錯誤造成的原因,應該是主干與分支的文件,沒有關聯關系.通過以上步驟,相當於是給主干和分支建立了關聯關系,他們有了主次關系,才能進行合並. 
可是有一點不明白的是,我分支的TestImpl.java是新建的,並且已經通過merge給了主干,但是改了分支后,再在主干merge的時候,卻報出了以上的錯誤

3)分支合並主干示例 (附例) 1.主干工程右鍵選擇 merge 合並下一步

2.選中 merge two different trees 下一步

3.from 主干版本路徑,版本號選擇分支分出去的版本號

    to 合並的分支目錄,版本號一般最新版本

      下一步

4.選擇屬性,一般直接下一步即可

5.下一步完成。若無沖突直接主干提交代碼即可。


若存在沖突解決辦法,個人建議使用最后一種解決沖突

Mark as conflicted. I will deal wiht it later. --標記沖突,合並到主干解決沖突

Resolve the conflict by using my version of the file.  --直接用主干的文件覆蓋,分支修改無效

Resolve the conflict by using the incoming of the file. --直接用分支修改覆蓋主干,以分支為准

Let me edit the file  with conflict markers inserted. --直接編輯沖突,編輯完保存,選擇yes保存。

Launch a graphical conflict  resolution editor.--直接比對文件,修改沖突,點擊保存。選擇yes解決沖突

 

 

 

 

 

 

 

 

本文轉載於:https://www.cnblogs.com/zhoumiao/p/5459552.html  和  http://blog.csdn.net/aya19880214/article/details/45894863


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM