天天看點

SVN分支詳解

http://sunjun041640.blog.163.com/blog/static/2562683220119189950865/?suggestedreading&wumii

在項目目錄下有三個目錄

a) trunk--------主幹, 線上環境運作的就是這個代碼.

b) branches----分支, 僅限開發, 合并使用. 通常是以項目名字命名子目錄,一般在aone上建立的小需求時,aone就會自動建立分支.

c) tags---------标記 aone一般用來合并釋出當天所有和這個代碼子產品相關的小需求代碼,然後統一進行編繹

我們接觸最多的是branches,branches開發工程師可以申請讀寫權限,trunk我們是沒有寫權限的,隻有讀權限。

常用SVN指令:

最全的還是使用svn help指令

在指令行中輸入svn help,會顯示svn 的所有子指令及全局參數;

在指令行中輸入svn help commond 會顯示commond 的使用方法及參數; 如svn help ci

1.新拉分支指令:

應用場景:

a.當有代碼子產品有新的釋出時,主幹上有更新,需要從主幹上新拉分支,将目前開發分支的代碼合并到新的分支上去,以保持開發分支上的代碼與主幹是一緻

b.當有新的功能點要開發,而不想與其它功能點在一起互相影響,需要從主幹上新拉分支

*指令格式:*svn copy trunk_url branch_url -m "comments"

執行路徑:在指令行的任意路徑執行均可

參數說明:

trunk_url:一般是從主幹上新拉分支

branch_url:分支位址 分支的指令方式,一般是日期_分支功能點_num 當然,這個名字很靈活了,最好的是能讓人一眼看出這個分支是做什麼功能點用的,num是1 2 3 。。。

*例如:*給測試同學測試多域名分支用的拉分支指令:

svn copy apath bpath -m "reason"

2.從svn 中檢出代碼到本地工作空間

應用場景:需要在本地跑應用,或是檢視代碼,你懂的。

指令格式:svn co URL[@REV]... [PATH]

執行路徑:在本地想要存放代碼的路徑中執行

參數說明:

URL[@REV]:想要檢出的代碼URL路徑 REV是版本号,如果不寫REV,則預設檢出最新代碼

PATH:如果不寫Path,則url的最後一段将作為檔案夾名稱(分支名稱)

例如:将分支20110805_test_multi-domain_1的代碼co到本地 目前路徑:

svn co xxxxxxxx .<這裡有個點喲>

3.檢視svn 送出記錄:

應用場景:需要檢視指定分支的修改記錄

指令格式:

svn log [PATH] 顯示本地 PATH (預設: ".") 的日志資訊。預設的版本範圍是 BASE:1

svn log URL[@REV] [PATH...] 顯示 URL 中 PATH (預設: ".") 的日志資訊。預設的版本範圍是 BASE:1

執行路徑:如果沒有PATH參數 ,則需要在本地工作拷貝所在路徑執行; 如果指定了URL,在任意路徑均可執行

*有個特别的參數:--stop-on-copy:*日志一直打到目前分支從日志主幹上拉下來為止,這個很有用的喲

-l num :看num條

-v:檢視每條修改記錄中,都有哪些檔案改動過了

例如:檢視分支20110802_68007_multi-domain_7從分支開始建立到最新代碼之前所有的日志

svn log http://svnxxxxxxxx --stop-on-copy

檢視分支20110802_68007_multi-domain_7的最新三條日志

svn log http://svn.xxxxxxx -l 3

檢視分支20110802_68007_multi-domain_7的最新一條日志,并檢視都有哪些檔案被修改過了

svn log http://xxxxxxx -l 1 -v

4.合并代碼指令:

例如:

svn merge -r 32129:head http://svn.xxxxxxx --dry-run

執行路徑:想要合并到的目标分支所co到本地的路徑

如想将xxxxxxxx上的32129到最新版本的所有修改合并到bbbbbbbbbb上,本地先将 20110805_test_multi-domain_1的代碼co到${user.home}/work/intl-iris下,然後, 在${user.home}/work/intl-iris下運作svn merge 指令

有個特别的參數:--dry-run,就是預合一下,并未真正的将改動合并到本地,一般可以使用這個指令檢視一下有哪些檔案會合并進來,有沒有沖突的檔案

如果不加--dry-run,則改動合并到本地工作拷貝了

5.檢視目前工作拷貝有哪些修改:

指令格式:svn st [PATH...]

如果不指定path,則是檢視目前目錄與svn上最新代碼相比較的修改,如果指定path,則檢視指定路徑下的修改。

執行路徑:目前工作拷貝路徑下

6.送出修改的代碼:

指令格式:svn ci -m 'comments' [PATH...]

送出代碼時,一定要寫comments,以說明這次是什麼修改,如果是合并代碼的送出,要按如下格式書寫:

Merging 20110802_68007_multi-domain_7 r32130 through r33590 into 20110805_test_multi-domain_1

含義即為:20110802_68007_multi-domain_7這個分支上r32130 到 r33590 的修改合并到了分支20110805_test_multi-domain_1上

如果不指定path,則将目前目錄下的所有修改送出到SVN

執行路徑:如果指定絕對path,則可以在任意路徑下執行,如果不指定path,或是指定的是相對路徑,則需要在工作拷貝路徑下執行。

請注意,如果是想要合并代碼,如果有staus為C(沖突)的,測試同學一定要聯系開發同學幫助合并,解決沖突。因為狀态為conflict時,svn 是不允許送出的

同時,請養成一個習慣,先從svn庫上更新最新的代碼 (svn up),再送出,以免送出時,出現沖突

7.将沖突标記為解決:

指令格式:svn reloved [path...]

将沖突的檔案标記為解決,svn 在收到這個指令後,會将本地因沖突産生的三個新檔案删除。如果不指定Path ,會将目前目錄及子目錄下所有沖突狀态的檔案标記為解決

切記:送出前,如果工作空間下有沖突的檔案,一定要先解決沖突,再将檔案标記為己解決,最後再送出

8.切換分支:

指令格式:svn sw url

切換到指定分支中,在切換時,本地的修改不會丢失,但是svn 位址會切換到新路徑下

*執行路徑:*本地工作拷貝路徑,如果不在正确的路徑運作該指令,會失敗的

例如:svn sw http://xxxxxxxxx

繼續閱讀