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