盡管svn沒有作強(qiáng)制要求,但是一般svn版本庫目錄建議創(chuàng)建trunk、branches和tags三個目錄。在實(shí)際操作時,trunk主干版本要時刻保持干凈,即隨時可以基于這個版本進(jìn)行修改并將應(yīng)用部署上線。branches是分支目錄,存放并行開發(fā)的項(xiàng)目代碼,因?yàn)榉种侵鞲傻牧畠r拷貝(相當(dāng)只是提交了一次主干版本,增加了一個版本號,并沒有取出版本庫作鏡像拷貝),所以你可以放心建立很多分支版本。不過 Subversion不支持跨版本庫的拷貝,當(dāng)使用svn copy時你只能在同一個版本庫內(nèi)操作。tags目錄存放trunk某個的快照,比如說release-1.0即trunk處于1.0版本時的快照。
使用svn來作團(tuán)隊(duì)的代碼管理,那么分支和合并將是非常常用的操作。下面是一個簡單的示例。
1. 創(chuàng)建分支。這里假設(shè)你要負(fù)責(zé)一個叫theme的項(xiàng)目,分支號1.7.2。
#這里的localhost是svn服務(wù)器地址
svn copy -m "1.7.2 - theme" svn://localhost/www/trunk svn://localhost/www/branches/branch1.7.2-theme
svn co svn://localhost/www/branches/branch1.7.2-theme
2. 從trunk中merge到分支。忙了一個星期終于開發(fā)完了,但是開發(fā)期間trunk版本有過改動,部署上線前你需要合并trunk的代碼。
#branch1.7.2-theme是分支目錄,注意不可以進(jìn)到分支子目錄
cd branch1.7.2-theme
#前面的12972是開分支之前trunk的版本號,后面的12991是merge時trunk的版本號
svn merge -r 12972:12991 svn://localhost/www/trunk
如果有沖突選擇p(postpone),merge完了之后使用svn st|grep ^C查看沖突文件,然后比對修改沖突文件。解決沖突后再check in ,信息寫上執(zhí)行的merge操作。
svn ci -m 'svn merge -r 12972:12991 svn://localhost/www/trunk'
3. 從分支merge到trunk。上線測試完畢,你很幸運(yùn),一切都如預(yù)期正常,這時就要將分支回歸trunk,將trunk更新到最新。
#先從trunk checkout一份新鮮的代碼,然后cd到該版本目錄下
svn co svn://localhost/www/trunk
cd trunk
#12973是分支開始的版本號,13006是分支結(jié)束的版本號
svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme
如步驟2一樣解決沖突,解決沖突后再check in,信息寫上執(zhí)行的merge操作。
svn ci -m "svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme"
相關(guān)的手冊可以參閱svn文檔,電子版點(diǎn)這里下載。