一、svn版本號(revision number)
1、 SVN的修訂版本號是基于整個版本庫的,所以當(dāng)你新建了一個svn版本庫,從修訂版本號0開始,每一次成功的提交(svn ci)版本號加1,不管這時你是新增還是刪除文件,是在分支上還是在主干上。
2、一個修訂版本號代表了版本庫的一個快照。同一修訂版本號的相同文件在不同版本樹(主干、分支)上有可能是不一樣的。
svn cat file:///"j:/yzrepos/test/trunk/f.txt" -r 19
f
svn cat file:///"j:/yzrepos/test/branches/0611/f.txt" -r 19
f
f1
3、工作拷貝并不一定對應(yīng)版本庫中的最新版本,除非是做了一次svn up,會使得工作拷貝中的所有文件的版本對應(yīng)版本庫的最新的同一修訂版本。
svn status -v 工作拷貝中每個文件的版本號:
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
4、svn的每個版本已經(jīng)包含了整個目錄樹的信息,所以我們可以svn up -r 19 file:///"j:/yzrepos/test/trunk/ 。
二、svn命令詳解
只介紹最常用的svn命令:
1、svn add
svn add * 新增當(dāng)前目錄下的所有文件,包括子目錄下(子目錄下的文件)
2、svn status
svn status 查看當(dāng)前目錄下所有文件和目錄的狀態(tài),這條語句對我們了解當(dāng)前工作拷貝中文件的狀態(tài)非常有幫助。
item 文件或目錄item不在svn的控制中
M item 文件item的內(nèi)容被修改
C item 文件item發(fā)生沖突
A item 文件、目錄預(yù)定加入到版本庫
svn status、svn diff和 svn revert這三條命令在沒有網(wǎng)絡(luò)的情況下也可以執(zhí)行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
3、svn help <subcommand> 查看子命令的語法、參數(shù)以及說明。
4、svn log 查看log信息
svn log http://svn./repos/branches/20060411 可以查看該分支的所有歷史log,包括該分支以前的主干的log日志,因為該分支是從主干copy過來的。
svn log --stop-on-copy http://svn./repos/branches/20060411 只查看該分支的歷史log,不跨越不同的拷貝。
svn log http://svn./repos/trunk 只能查看該主干的歷史log,而不能看分支的log。
5、svn switch 分支、主干之間的切換, 注意:切換時本地工作拷貝的修改將會保留,這有時候?qū)τ谖覀兒苤匾丁?/p>
6、大家要學(xué)會使用svn的命令,掌握它有助于我們更深入地了解svn,不要完全依賴svn的圖形化工具。
三、合并
合并的操作是版本控制中最基本,最重要,也是最容易出錯的地方。
svn merge -r 1:10 http://svn./repos/calc/trunk
記住一句話就可以:該操作是將某個版本樹(主干或者分支)上版本號為10與版本號為1的差異合并到當(dāng)前工作拷貝中。
三個點:當(dāng)前你的工作拷貝,你需要把哪個版本樹上哪兩個版本號的差異合并到當(dāng)前工作拷貝的版本中,要避免重復(fù)合并。
三、解決沖突:
出現(xiàn)沖突的兩種情況:
1、svn up的時候 工作拷貝和服務(wù)器在同一版本樹,當(dāng)工作拷貝的改動與服務(wù)器的改動沖突時,會出現(xiàn)沖突。
2、svn merge的時候 比如我們將分支上的某個初始版本2和最終版本3的差異合并到主干上,那么如果分支初始版本2和最終版本3的差異 與 主干當(dāng)前最新版本4和主干版本2的差異有相同的改動,那么這些相同之處就會有沖突。
出現(xiàn)沖突時,svn就會把沖突的文件標(biāo)記C,同時生成三個臨時文件,分別代表本地工作拷貝的最初版本,修改后的版本和從服務(wù)器取到的最新版本。
解決完沖突后,然后調(diào)用svn resolved,svn會刪除那三個臨時文件。
四、分支
1、建立分支
(1) svn copy trunk branches/my-calc-branch
svn copy命令將trunk工作目錄下的所有目錄和文件拷貝到一個新的目錄branhes/my-calc-branch下
(2) svn copy http://svn./repos/calc/trunk \
http://svn./repos/calc/branches/my-calc-branch \
-m "Creating a private branch of /calc/trunk."
這兩種是有區(qū)別的,
前面是以當(dāng)前工作拷貝為基礎(chǔ),后者以當(dāng)前服務(wù)器的最新版本為基礎(chǔ)。
前者copy后的目錄并沒有在版本庫中,需要執(zhí)行svn add和svn ci才到版本庫中,后者直接在服務(wù)器的版本庫中操作。
2、實際上svn中沒有內(nèi)在的分支概念—只有拷貝。