1. 程式人生 > >SVN switch 用法總結

SVN switch 用法總結

完全 如果 jpg 進入 空間 簡單 src 控制 用法總結

一直知道SVN有個switch命令,但是對它的介紹教程卻很少,大多是生硬的svn幫助文檔裏的文字,從而一直不怎麽會用。今天看了這篇文章,突覺豁然開朗,整理下來以備查閱。

使用SVN,自然是需要與別人合作開發才能體現出作用。兩個人如果都在trunk上工作,那麽每次提交時都要保證代碼的正確性,否則自己提交一個bug百出的版本,對方一更新就掛了,所以提交時都要很謹慎。但我覺得應該有人會像我一樣有這樣的強迫癥,文件做點小修改就想提交到服務器上去,唯恐自己將來哪裏修改失敗而萬劫不復。抑或為了備份考慮或者有事離開,也常常把寫的不完整的程序提交上去。因此,每個人建一個branch,在自己的branch上修改,再把修改merge進trunk裏是個正確選擇。

之前不了解switch的用法,導致導致建的branch完全沒有個branch的樣子,基本和trunk平起平坐了。自己修改了內容,想要提交到trunk中,怎麽做呢?恩,先把work copy提交到branch中;把trunk中現在的內容merge進work copy中(別人可能已經更新了trunk),然後再提交到branch中。然後把當前的work copy switch到 trunk(以前以為swith是這麽用的!),把branch的內容merge到work copy中,然後把work copy提交到版本庫中。為了把branch提交到trunk中,居然需要三次提交,這完全是在操作兩個完全獨立的版本庫嘛,根本沒有什麽邏輯上的聯系!

現在終於要進入主題,講講switch究竟是怎麽用的了。

根據官方幫助文檔,switch的作用是 把工作拷貝更新到別的URL。下面的例子也講的不是很明白,導致我一直以為switch就是你可以在一個文件夾裏管理兩個branch,來回切換就行了,不需要新建兩個文件夾,從而節省你的硬盤空間!現在通過我上面提到的那篇文章才明白,原來:一個work copy裏的文件夾,可以來自不同的版本庫;文件夾裏的每一個文件,可以受到不同版本庫的控制!

什麽意思?ok,讓我們來親自實踐一下。

首先建立一個測試文件夾

技術分享

把trunk checkout 到本地,不妨命名為me

然後再checkout出來一遍,命名為other

相當於我們有兩個本地副本在工作。

在me裏,我們建兩個文件,a.txt(內容Hello world!),b.txt(內容Good morning!)把me提交上去。然後為a.txt建立一個branch,就放到branch下面稱為a.me.txt吧。

最終我們的版本庫是這個樣子:

技術分享

回到本地,在me文件夾了,我們對a.txt進行switch,選擇branch裏的那個文件,這樣,a.txt本身名字沒有變,只是指向了版本庫中branch的那個文件了。

技術分享

ok,我們對它做點修改,

技術分享

提交上去,我們更新一下other,看看a.txt,會發現內容卻是保持著最早的版本,剛才我們的提交卻是是修改了branch而沒有改變trunk。

我們以other的身份修改b.txt

技術分享

提交然後更新me,就會發現b.txt確實受到了全局的改變。

好,下面我們就要把剛才對a.txt提交到全局了。這個其實就很簡單了,把a.txt switch回trunk,merge的時候選擇Reintegrate a branch,來源選擇branch裏的那個文件就好了。最後不要忘了提交。

技術分享

技術分享

這時候更新一下other,就會發現 a.txt 的變化了

這差不多就把switch的用法徹底理明白了。switch是把工作空間裏的一些文件、文件夾交給另一個版本庫來控制,讓你在一個版本庫中工作的時候隨時接受別人在另一個版本庫對其他文件的更新。因此,你就可以完全自在的編輯自己的branch,只要update就可以獲取trunk的更新(當然,trunk裏別人對你switch走的文件的修改你是無法更新的,等你下次要merge是會產生conflict),因此brach和trunk的邏輯關系就是branch跟著trunk更新,trunk通過branch的merge而不斷完善。

當然了,如果你對一個文件夾裏德很多文件進行switch,就會很難分辨出那些文件都是受哪個版本庫的控制(需要每個文件單獨查詢),因此一定要小心別產生混亂呦。

SVN switch 用法總結