天天看點

Linux下SVN常用指令

Linux下SVN常用指令,總結如下:

  • svn checkout從伺服器簽出代碼到本地目錄

指令格式:svn checkout URL [PATH] (簡寫:svn co)

URL:代碼路徑 PATH:儲存拷貝的本地路徑 如果省略路徑參數,URL 最末尾的目錄名作為目标目錄名。

例: svn co svn://192.168.2.66/xx/xx/project

  • svn update更新本地工作拷貝

指令格式:svn update -r版本号 [PATH] (簡寫:svn up)

svn update如果後面沒有指定-r選項及目錄,預設将目前目錄及其子目錄下的所有檔案都更新到最新版本。

例: svn update(将目前目錄及其子目錄更新到最新版本) svn update -r200 (将目前目錄及其子目錄更新或還原到版本200)

svn update -r 200 scripts/startup_1_init (将startup_1_init檔案更新或還原到版本200)

  • svn add添加新子產品目錄或檔案

指令格式:svn add PATH 把檔案以及目錄的名稱添加給版本控制系統,它們會在下次送出時被添加到項目倉庫中。

例: #mkdir test #svn add test (将目錄test添加給版本控制系統) A test (指令執行後test目錄狀态為“A”,表示添加)

#touch test.txt #svn add test.txt (将檔案test.txt添加給版本控制系統) A test.txt (指令執行後test.txt檔案狀态為“A”,表示添加)

  • svn delete删除目錄或檔案
  • 指令格式:svn delete target(簡寫:svn del) target是工作拷貝中的檔案或者目錄,它被從工作拷貝中移除并且預計在下次送出時删除掉。此指令在使用的時候一定要慎重。 例:

    #svn del scripts/startup_1_init D scripts/startup_1_init (指令執行後startup_1_init狀态為“D”,表示删除)

    注:不要使用非svn指令(rm)删除工作拷貝中的檔案或者目錄,導緻代碼不完整。

  • svn status檢視工作副本中目錄與檔案的狀态

指令格式:svn status [PATH](簡寫:svn st) 列印工作拷貝中檔案和目錄的狀态。 svn st|grep

^狀态(獲得某狀态檔案清單) svn st|grep -v ^狀态(也作svn st|grep

[狀态],過濾掉某狀态得到其他狀态檔案清單) 例: svn st|grep ^M (擷取“M”狀态檔案清單) svn

st|grep -v ^?(過濾掉“?”狀态的檔案清單) 常見狀态如下:

“A” 預定加入到版本庫

“C” 發生沖突

“D” 被删除了

“M” 内容被修改

“?” 條目未納入版本控制

“!” 該項目已遺失(被非svn指令删除)或不完整

“~” 版本控制下的項目與其它類型的項目重名 其中,“?”“!”“~”為非正常狀态,svn不會将處于該狀态的檔案送出至項目倉庫。 “!” 狀态說明 出現原因:使用非svn指令(rm等)删除了此條目。 解決方法:使用svn update(svn

up),将被删除的條目更新出來。 正确操作方法:使用svn delete删除納入版本控制的條目 “~ ”狀态說明

出現原因:删除了一個版本庫的檔案,建立了一個在原來的位置,建立檔案類型與原有檔案不一緻,而且整個過程中沒有使用svn delete或是svn

add。 解決方法: 将“~”檔案svn revert 掉,按照正确操作重新修改。 出錯案例:

wsdl頭檔案統一建立在include/wsdl_include目錄中,各子產品webservice目錄下的同名wsdl頭檔案隻是建立的軟連結。若拷貝include/wsdl_include目錄中wsdl頭檔案将webservice目錄下的同名wsdl頭檔案覆寫掉,svn

st檢視wsdl頭檔案狀态為“~”。

  • svn revert恢複本地修改

指令格式:svn revert [-R] PATH 撤銷掉對本地代碼所做的修改恢複到原始未改變的工作副本狀态。

若撤銷對整個目錄的修改,需要加“-R”選項。

-R:向下遞歸,撤銷對整個目錄所做的修改。 例: svn revert scripts/startup_1_init(發現誤改了某個檔案,可執行此指令将改動撤銷掉。) svn revert -R scripts

(撤銷對scripts目錄中檔案所做的所有改動。)

  • svn diff比較差異

指令格式:svn diff [-r m:n] [PATH](簡寫:svn di) 将修改的檔案與基礎版本比較。 例: svn diff

(預設顯示目前目錄及其子目錄下的所有修改差異) svn diff

scripts/startup_1_init(檢視startup_1_init檔案的修改差異) svn diff >bugxxx.diff

(修改内容多時導出到diff檔案中,便于更直覺的檢查。) svn diff -r m:n [PATH]

(對版本m和版本n比較差異。) 獲得代碼合入後的diff 檔案(即某次的送出diff): svn diff -r

送出後版本号-1:送出後版本号 > bugxxx.diff 或使用等價指令 svn diff -c 送出後版本号 >

bugxxx.diff (檢查合入後的diff檔案内容是否與自己的修改相符,有沒有多合、漏合或者錯合的代碼

,對比合入前生成的diff檔案與合入後的diff檔案是否一緻。)

注:svn status、svn diff和 svn

revert這三條指令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。

  • svn commit将改動的檔案送出到版本庫

指令格式:svn commit -m “bugxxx by xxx” [PATH] (簡寫:svn ci) PATH

不填或為“.”時,即将目前目錄及其子目錄下的所有改動送出到版本庫。 例: svn commit -m “bug112 modified by

zhangsan” --username zhangsan

注:在代碼根目錄下将對應問題單的所有修改檔案一次性送出到版本庫,不要到各個目錄下分别送出以避免漏合;問題一次性修改合入,避免一個問題單合入多次導緻中間版本出現編譯或功能問題。

  • svn log檢視日志

指令格式:svn log [PATH] 顯示本地 PATH的日志資訊,PATH不填或為“.”時顯示目前目錄的日志資訊。 例: svn log

scripts/startup_1_init(顯示此檔案的所有修改記錄,及其版本号的變化。) svn info檢視檔案詳細資訊

指令格式:svn info [PATH]

  • 建立版本控制的目錄。

svn mkdir建立納入版本控制下的新目錄 指令格式:svn mkdir PATH 例: #svn mkdir newdir A

newdir 添加目錄newdir,相當于mkdir newdir和svn add newdir的指令集合。

  • svn merge将兩個源差異應用至工作副本

适用場景1: 一個問題要合入多個分支,若分支代碼差異不大,可以在其中一個分支(a)上修改送出後,使用svn

merge指令将改動合并到另外的分支(b)上。 用法: 在代碼根目錄下執行: svn merge

–ignore-ancestry -rN-1:N源代碼路徑 目的代碼路徑 或使用等價指令 svn merge --ignore-ancestry -c N源代碼路徑 目的代碼路徑 其中,N指的的是你在a分支上此次改動送出後的svn版本号;源代碼路徑和目的代碼路徑均為本地代碼的路徑(相對路徑、絕對路徑皆可以)。 舉例:

将a中的改動merge到b中,如果是在b代碼根目錄下執行,指令如下:

svn merge --ignore-ancestry -rN-1:N a代碼相對路徑 . (“.”代表目前目錄) 注意事項: 執行此指令後一定要檢查檔案狀态,有時候會附帶着改動一些其他檔案的屬性,修改svn:mergeinfo,此類修改隻是更改檔案的合并資訊對功能無任何影響,不過建議将這些檔案revert掉再生成diff檔案檢查自己的改動是否正确,

最後編譯版本做功能驗證,驗證通過後再送出(svn commit)至項目倉庫。 補充:使用svn

merge指令移植代碼用于問題已合入merge源分支的情況下。若問題未合入任何分支則可使用如下方法:

如果代碼在A分支中,尚未合入,則可先生成diff檔案: svn diff [path1] [path2] [path3] >

xxx.diff 然後進入B分支同級目錄,執行patch -p0 <

xxx.diff,即可導入修改。(因二進制檔案無法生成diff,是以也無法通過patch将二進制檔案的變更移植到其他分支。)

注意:産生沖突時,會生成與沖突檔案對應的沖突檔案(字尾與svn操作時生成的沖突檔案不同),可用于人工解決沖突。

适用場景2: 回退問題單。 用法: 在代碼根目錄下執行以下指令

svn merge --ignore-ancestry -rN:N-1 . (“.”代表目前目錄,不可省。) 或使用等價指令svn merge --ignore-ancestry -c -N . N代表此次要被回退的問題單之前合入代碼時的svn版本号。 舉例:

将主線分支中合入的bug11373回退掉。(bug11373合入主線後的svn版本号為16534。)

在本地主線代碼工作拷貝根目錄下執行svn merge回退此次合入的修改,并将回退操作由工作拷貝送出至項目倉庫。 svn merge

–ignore-ancestry -r16534:16533 . ( 或svn merge --ignore-ancestry -c -16534 . ) svn ci -m “rollback bug11373” svn help幫助 指令格式:svn help [子指令] 描述本程式或其子指令的用法。

繼續閱讀