轉
楊爭
本人在在以前一篇文章"svn的最佳實踐"介紹了使用svn進行版本控制的思想,本文進一步從實戰的角度介紹如何使用svn,其中重點闡述了svn的一些重要概念,便於大家更好地理解svn,這樣有利於指導我們的在實際開發過程中的svn操作。
一、svn版本號(revision number)
1、 svn的修訂版本號是基於整個版本庫的,所以當你新建了乙個svn版本庫,從修訂版本號0開始,每一次成功的提交(svn ci)版本號加1,不管這時你是新增還是刪除檔案,是在分支上還是在主幹上。
2、乙個修訂版本號代表了版本庫的乙個快照。同一修訂版本號的相同檔案在不同版本樹(主幹、分支)上有可能是不一樣的。
svn cat file:///"j:/yzrepos/test/trunk/f.txt" -r 19
fsvn cat file:///"j:/yzrepos/test/branches/0611/f.txt" -r 19ff1
3、工作拷貝並不一定對應版本庫中的最新版本,除非是做了一次svn up,會使得工作拷貝中的所有檔案的版本對應版本庫的最新的同一修訂版本。
svn status -v 工作拷貝中每個檔案的版本號:
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最後一次修改的版本號和修改人。
4、svn的每個版本已經包含了整個目錄樹的資訊,所以我們可以svn up -r 19 file:///"j:/yzrepos/test/trunk/ 。
二、svn命令詳解
只介紹最常用的svn命令:
1、svn add
svn add * 新增當前目錄下的所有檔案,包括子目錄下(子目錄下的檔案)
2、svn status
svn status 檢視當前目錄下所有檔案和目錄的狀態,這條語句對我們了解當前工作拷貝中檔案的狀態非常有幫助。
? item 檔案或目錄item不在svn的控制中
m item 檔案item的內容被修改
c item 檔案item發生衝突
a item 檔案、目錄預定加入到版本庫
svn status、svn diff和 svn revert這三條命令在沒有網路的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
3、svn help 檢視子命令的語法、引數以及說明。
4、svn log 檢視log資訊
svn log http://svn.example.com/repos/branches/20060411 可以檢視該分支的所有歷史log,包括該分支以前的主幹的log日誌,因為該分支是從主幹copy過來的。
svn log --stop-on-copy http://svn.example.com/repos/branches/20060411 只檢視該分支的歷史log,不跨越不同的拷貝。
svn log http://svn.example.com/repos/trunk 只能檢視該主幹的歷史log,而不能看分支的log。
5、svn switch 分支、主幹之間的切換, 注意:切換時本地工作拷貝的修改將會保留,這有時候對於我們很重要哦。
6、大家要學會使用svn的命令,掌握它有助於我們更深入地了解svn,不要完全依賴svn的圖形化工具。
三、合併
合併的操作是版本控制中最基本,最重要,也是最容易出錯的地方。
記住一句話就可以:該操作是將某個版本樹(主幹或者分支)上版本號為10與版本號為1的差異合併到當前工作拷貝中。
三個點:當前你的工作拷貝,你需要把哪個版本樹上哪兩個版本號的差異合併到當前工作拷貝的版本中,要避免重複合併。
三、解決衝突:
出現衝突的兩種情況:
1、svn up的時候 工作拷貝和伺服器在同一版本樹,當工作拷貝的改動與伺服器的改動衝突時,會出現衝突。
2、svn merge的時候 比如我們將分支上的某個初始版本2和最終版本3的差異合併到主幹上,那麼如果分支初始版本2和最終版本3的差異 與 主幹當前最新版本4和主幹版本2的差異有相同的改動,那麼這些相同之處就會有衝突。
出現衝突時,svn就會把衝突的檔案標記c,同時生成三個臨時檔案,分別代表本地工作拷貝的最初版本,修改後的版本和從伺服器取到的最新版本。
解決完衝突後,然後呼叫svn resolved,svn會刪除那三個臨時檔案。
四、分支
1、建立分支
(1) svn copy trunk branches/my-calc-branch
svn copy命令將trunk工作目錄下的所有目錄和檔案拷貝到乙個新的目錄branhes/my-calc-branch下
這兩種是有區別的,
前面是以當前工作拷貝為基礎,後者以當前伺服器的最新版本為基礎。
前者copy後的目錄並沒有在版本庫中,需要執行svn add和svn ci才到版本庫中,後者直接在伺服器的版本庫中操作。
2、實際上svn中沒有內在的分支概念—只有拷貝。
SVN常用命令
雖然svn在windows下有強大的圖形化客戶端,但在linux下命令還是主力 1 將檔案checkout到本地目錄 svn checkout path path是伺服器上的目錄 例如 svn checkout svn 簡寫 svn co 2 往版本庫中新增新的檔案 svn add file 例如 ...
svn常用命令
svn 提交注意的問題 1.可以直接通過svn ci 提交修改的 2.如果提示過期,是因為衝突,首先要update一下,然後用svn resolved清除多餘的檔案,並且解決衝突,最後svn ci 提交。一.提交處理過程 以make.rules為例 1 修改提交 svn ci m make.rule...
svn常用命令
svn命令 1 將檔案checkout到本地目錄 svn checkout path path是伺服器上的目錄 例如 svn checkout svn 簡寫 svn co 2 往版本庫中新增新的檔案 svn add file 例如 svn add test.php 新增test.php svn ad...