一、什么是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