命令行 Subversion 入門
如果您參與的項目正在使用 Subversion 進(jìn)行版本控制,您將需要使用 Subversion 訪問和更改項目源文件。您可以點擊項目的左側(cè)導(dǎo)航窗格上的“Subversion”鏈接,在線瀏覽源代碼以查看該項目的目錄結(jié)構(gòu)和文件。
“Subversion”頁面顯示三個子目錄:branches/、tags/、trunk/ 和一個自述文件。自述文件可以使您對 Subversion 存儲庫有一個整體了解。您可以點擊“訪問選項”,查看 Subversion 客戶端安裝說明。您的本地計算機(jī)上必須安裝有 Subversion 客戶端。
獲取項目的本地工作副本:svn checkout
若要獲取最新源文件的“工作副本”,您必須首先簽出這些源文件,這一過程會將文件從存儲庫復(fù)制到您的系統(tǒng)中。在您的外殼程序或終端客戶端,請鍵入:
svn checkout https://(項目名稱).(域)/svn/(項目名稱)/(DIR) (項目名稱) --username [在此處輸入用戶名]
當(dāng)系統(tǒng)提示您時輸入您的用戶密碼。此密碼應(yīng)與您在本站點中的用戶帳號的密碼相同。不指定目錄將簽出整個項目源代碼。您可能希望簽出“trunk/”目錄,因為此目錄具有工作“www/”文件夾。
轉(zhuǎn)換:--revision (-r) REV, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
請參見基本工作周期、初始簽出、工作副本。
注意:如果站點未啟用 SSL(安全套接字層),則在執(zhí)行 Subversion 操作時,請使用 http
而不是 https
。例如,若要從項目的存儲庫中簽出最新的源代碼,請使用以下命令:
svn checkout https://(項目名稱).(域)/svn/(項目名稱)/(DIR) (項目名稱) --username [在此處輸入用戶名]
處理 Subversion 存儲庫中的文件
從項目存儲庫中簽出本地副本后,您可以在本地計算機(jī)上編輯現(xiàn)有文件、創(chuàng)建新文件和目錄、以及刪除文件。在您將所做的任何更改提交回 Subversion 存儲庫之前,這些更改只對項目文件的本地副本起作用。
將工作副本中的文件/目錄添加到存儲庫中:svn add
在您第一次在工作目錄中創(chuàng)建并編輯新文件后,可以將此文件添加到存儲庫中,或添加一個目錄,目錄中有無內(nèi)容均可。
svn add FILENAME/DIR
。
這樣就會在您的工作副本中添加文件/目錄,并安排它們以添加到存儲庫中。您下次提交時,會上載這些文件/目錄,并將它們添加到存儲庫中。如果您了添加內(nèi)容,但在提交前又改變了主意,則可以使用 svn revert
取消添加內(nèi)容的安排。
轉(zhuǎn)換:--targets FILENAME, --non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props
請參見添加文件/目錄示例。
查看帶有修訂和作者信息的特定文件的內(nèi)容:svn blame
若要在線查看指定文件的作者和修訂信息,請鍵入:
svn blame FILENAME
每行文本的開始處都以上次更改該行的作者(用戶名)和修訂版本號作為批注。
轉(zhuǎn)換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
查看特定文件的內(nèi)容:svn cat
有時,與存儲庫相比較,您的工作副本可能已過時;或者您可能已修改了本地工作副本。在這些情況下,在提交更改或決定編輯您的工作副本之前,您會希望查看指定文件的內(nèi)容差異。運行 svn cat FILENAME
將自動從存儲庫中取出 HEAD 修訂版本。這條子命令主要用于檢索具有較舊修訂版本號的文件,并將其顯示在屏幕上。通過在此站點上瀏覽項目源代碼,也可以執(zhí)行相同的操作。
轉(zhuǎn)換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
清理工作副本:svn cleanup
有時可能會出現(xiàn)“工作副本已鎖定”錯誤。若要刪除鎖定,并遞歸清理工作副本,請使用 svn update
。
轉(zhuǎn)換:--diff3-cmd CMD, --config-dir DIR
請參見 svn cleanup
。
復(fù)制工作副本或存儲庫中的文件或目錄:svn copy
在項目中,您可能需要用到過去的舊文檔。例如,您可能想要使用一個已存在的 HTML 文件,使用其代碼作為參考以在創(chuàng)建新內(nèi)容時保持產(chǎn)品外觀和感覺。創(chuàng)建文件時,您無需從頭開始,只需使用 svn copy
復(fù)制此文件,然后將其另存為其它名稱并更改其內(nèi)容。您可以從存儲庫將文件復(fù)制為本地工作副本,也可以將本地工作副本復(fù)制回存儲庫文件。您還可以在本地工作副本內(nèi)部復(fù)制文件。Subversion 不支持在存儲庫之間進(jìn)行復(fù)制。可使用 svn copy SRC DST
完成此操作。
轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR
請參見 svn copy
。
從本地工作副本中刪除文件或目錄:svn delete
您可能希望從本地工作副本中刪除不需要的文件。使用 svn delete FILENAME
可安排刪除文件。僅當(dāng)您提交時,才會在存儲庫中將該文件實際刪除。
轉(zhuǎn)換:--force, --force-log, --message (-m) TEXT, --file (-F) FILE, --quiet (-q), --targets FILENAME, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR
查看文件之間的差異:svn diff
可以使用 svn diff
顯示工作副本中的指定文件相對于存儲庫中相應(yīng)文件所做的本地修改。在命令提示符處,請鍵入:
svn diff (文件的路徑) (項目存儲庫的 URL)
例如,若要將本地修改后的文件“index.html”與項目存儲庫中的相應(yīng)文件進(jìn)行比較,請鍵入:
svn diff $SRC/...../index.html https://(項目名稱).(域)/svn/(項目名稱)/trunk (項目名稱) --username [在此處輸入用戶名]
除此之外,您也可以轉(zhuǎn)到該文件所屬的目錄,并鍵入:
svn diff (FILENAME)
該命令將顯示差異,并且?guī)в行抻啺姹咎枴?/p>
轉(zhuǎn)換:--revision (-r) REV, --old OLD-TARGET, --new NEW-TARGET, --extensions (-x) "ARGS", --non-recursive (-N), --diff-cmd CMD, --notice-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --no-diff-deleted, --config-dir DIR
請參見檢查歷史、svn diff
。
在本地計算機(jī)上導(dǎo)出空目錄樹:svn export
在您的本地計算機(jī)上,可以從項目存儲庫或本地工作副本內(nèi)部提取一個無版本的副本,也稱為空目錄樹。若要從存儲庫中獲得較舊修訂版本的空目錄,請鍵入:
svn export [-r REV] [PATH]
該命令將從 URL 指定的存儲庫中的修訂版本 REV 位置(如果指定,否則從 HEAD 位置)將空目錄樹導(dǎo)出到 PATH。如省略 PATH,則該 URL 的最后一部分將用作本地目錄名稱。除此之外,您也可以在本地計算機(jī)內(nèi)部,從一個工作副本(由 PATH1 指定)向另一工作副本(由 PATH2 指定)導(dǎo)出空目錄樹。這將保留所有的本地更改,但不會復(fù)制版本控制中的文件。若要執(zhí)行此操作,請鍵入:
svn export PATH1 PATH2
轉(zhuǎn)換:--revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
獲取有關(guān) Subversion 的幫助:svn help
Subversion 可以在命令行界面為您提供幫助。若要獲得有關(guān)特定子命令的幫助,請鍵入:
svn help [SUBCOMMAND...]
轉(zhuǎn)換:--version, --quiet (-q)
將您的更改提供給 SVN 存儲庫
對文件和/或目錄進(jìn)行本地更改后,您必須向 SVN 存儲庫提交這些更改。
提交您的更改:svn commit
若要向共享存儲庫提交您的更改,請鍵入:
svn commit -m "請在此處鍵入您的理由"
如果您不包括對該文件更改的描述,系統(tǒng)將提示您調(diào)用文件編輯器添加描述,然后 svn 才能完成提交操作;否則將會出現(xiàn)“提交失敗”錯誤。所有的提交都會被自動記錄,并發(fā)布到項目的提交討論中。
轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --targets FILENAME, --force-log, --username USER, --password PASS, --no-auth-cache, --non-interactive, --encoding ENC, --config-dir DIR
請參見提交您的更改、editor-cmd。
將無版本的文件或樹導(dǎo)入到項目存儲庫中:svn import
您可以使用 svn import
將無版本的文件或樹遞歸提交到項目存儲庫中。將根據(jù)需要在存儲庫中創(chuàng)建父目錄。使用下面的命令可以從 PATH 向 URL 遞歸提交副本。如果省略 PATH,將認(rèn)為其為“.”。
svn import [PATH] URL
示例:若要在您的本地計算機(jī)上創(chuàng)建帶有一個文件的無版本目錄 (D)。請點擊項目左側(cè)導(dǎo)航窗格中的“Subversion”鏈接,找到 Subversion 頁面。請注意,“瀏覽源代碼”下未列出 NEWDIR。若要將 D 導(dǎo)入項目存儲庫,請鍵入:
svn import -m "請在此處鍵入您的信息" D http://(項目名稱).(域)/svn/(項目名稱)/NEWDIR
刷新該頁面。請注意,此時“瀏覽源代碼”下列出了 D。點擊 D 查看該文件。
轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR, --auto-props, --no-auto-props
打印有關(guān)工作副本中路徑的信息:svn info
有時,您將需要有關(guān)工作副本中文件的具體信息,以執(zhí)行某些子命令。鍵入 svn info
,將打印出詳盡且有用的信息,這些信息涉及工作副本中的工作副本路徑中的項,其中包括:路徑、名稱、URL、修訂版本、節(jié)點類型、上次更改、作者、上次更改修訂版本、上次更改日期、上次更新的文本、上次更新的屬性以及校驗和。
轉(zhuǎn)換:--targets FILENAME, --recursive (-R), --config-dir DIR
查看存儲庫中的目錄項列表:svn list
在開始處理項目或取出“工作副本”之前,您可能希望查看項目存儲庫中的內(nèi)容(即目錄和文件),或查看本地工作副本中的目錄項。在命令提示符處鍵入 svn list [TARGET...]
,也可以查看這些內(nèi)容。除此之外,您也可以找到項目中的“軟件配置管理”頁,查看項目存儲庫。
轉(zhuǎn)換:--revision (-r) REV, --verbose (-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
查看提交日志信息:svn log
如果要查看“工作副本”或存儲庫中文件/目錄的各個文件/目錄歷史,以跟蹤修訂信息,請鍵入:
svn log [PATH]
該命令會顯示出文件/目錄的修訂信息,從最近所做的修訂版本開始顯示提交信息和作者姓名等信息。除此之外,您也可以使用該站點,查看項目存儲庫中各個文件的提交日志信息。請點擊項目左側(cè)導(dǎo)航窗格中的“Subversion”鏈接。將出現(xiàn) Subversion 頁。搜索“瀏覽源代碼”的目錄中的文件,然后點擊文件名。這時將會顯示一個提交日志信息頁面。
轉(zhuǎn)換:--revision (-r) REV, --quiet (-q), --verbose (-v), --targets FILENAME, --stop-on-copy, --incremental, --xml, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
請參見 svn log
。
合并更改:svn merge
您可以運行 svn merge
命令,以指示 Subversion 將存儲庫中最新版本的文件合并到您的工作副本中。
轉(zhuǎn)換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --force, --dry-run, --diff3-cmd CMD, --ignore-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
請參見 svn merge
、解決沖突(合并其他人的更改)、分支和合并:常見合并使用案例、合并最佳實踐。
使用存儲庫
創(chuàng)建新目錄:svn mkdir
若要在您的工作副本中創(chuàng)建新目錄,請鍵入:
svn mkdir PATH
若要在您的項目存儲庫中創(chuàng)建新目錄,請鍵入:
svn mkdir URL
PATH 或 URL 的最后一部分決定目錄名稱。在立即提交時在存儲庫中創(chuàng)建目錄,所以還需要一條提交信息
轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR
移動文件或目錄:svn move
您可以使用 svn move SRC DST
在工作副本或項目存儲庫內(nèi)部移動文件或目錄。此命令等效于在使用 svn copy
后,再使用 svn delete
。在工作副本內(nèi)部移動文件或目錄,不僅會移動該文件或目錄,而且還將安排它以便于下次提交時進(jìn)行添加。在項目存儲庫內(nèi)部移動文件或目錄屬于封閉單元式提交,所以需要一條提交信息。
轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR
使用屬性
Subversion 具有很多具體屬性,這些屬性影響或決定其行為。您可以修改、提交和撤消屬性更改,就像對文件內(nèi)容所執(zhí)行的操作一樣。您還可以從本地工作副本或項目存儲庫的文件、目錄或修訂版本中,刪除、編輯、打印、列出以及設(shè)置屬性。
請參見 屬性、無版本屬性、元數(shù)據(jù)屬性、svn propdel
、svn propedit
、svn propget
、svn proplist
、svn propset
、Hook 腳本。
解決沖突:svn resolved
更新本地工作副本時,可能會遇到?jīng)_突。您需要解決此沖突。解決沖突后,鍵入 svn resolved PATH...
,通知工作副本該沖突已“解決”。
轉(zhuǎn)換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR
請參見解決沖突(合并其他人的更改)。
撤消您的更改:svn revert
使用 Subversion 時,您會發(fā)現(xiàn) svn revert PATH...
等效于 Windows 中的 Ctrl Z
。您可以:
- 撤消本地工作副本中的任何本地更改,從而解決沖突狀態(tài)。
- 撤消工作副本中的條目內(nèi)容及屬性更改。
- 取消任何進(jìn)度安排操作,如添加文件、刪除文件等。
注意,如不提供目標(biāo),會導(dǎo)致工作副本中的更改丟失。
轉(zhuǎn)換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR
獲取文件/目錄的狀態(tài):svn status
在版本控制中,將更改提交到項目存儲庫之前最好對其進(jìn)行審查。可以運行 svn status
打印工作副本中的文件和目錄的狀態(tài)。打印結(jié)果為八列編碼輸出。由于每列都有詳盡的圖例,若要從此輸出中得出“無錯誤”的結(jié)論幾乎不可能。若要使此任務(wù)更加簡單,并同時可看到示例,請在命令提示符處鍵入 svn help status
。
轉(zhuǎn)換:--show-updates (-u), --verbose (-v), --non-recursive (-N), --quiet (-q), --no-ignore, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir
請參見檢查你的更改。
轉(zhuǎn)換工作副本:svn switch
可以使用 svn switch URL [PATH]
更新工作副本,以鏡像新的 URL。您還可以將工作副本或部分工作副本移動到新的分支。您可以將此子命令用作分支的快捷方式。
轉(zhuǎn)換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --relocate, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
請參見轉(zhuǎn)換工作副本、分支和合并以及 svn switch
。
更新工作副本:svn update
為了進(jìn)行更好的版本控制,建議您每天用項目存儲庫更新本地工作副本,請使用:
svn update [PATH...]
列出的已更新條目以及它們的當(dāng)前狀態(tài)顯示如下:
- A = 已將一個文件添加到您的工作副本中。
- U = 已更新您的工作副本中的一個文件。
- D = 已從您的工作副本中刪除一個文件。
- R = 已替換您的工作副本中的一個文件。
- G = 已成功合并了一個文件。
- C = 一個文件已合并了必須手動解決的沖突
轉(zhuǎn)換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR
請參見更新你的工作副本、手動合并沖突。
分支和標(biāo)記
項目的主干通常用作開發(fā)主線,而分支通常用作主線的變更。分支是正在進(jìn)行的開發(fā)線。在軟件開發(fā)生命周期中,如果軟件產(chǎn)品的發(fā)布版本已到期,經(jīng)常會用到分支,使測試者可以使用候選版本,使新的開發(fā)可以繼續(xù)進(jìn)行,不受測試的約束。分支還用于實驗性工作,以及完成代碼重寫。標(biāo)記是將一組文件修訂版本標(biāo)記為整體的方式。雖然分支和標(biāo)記都是使用 svn copy
子命令創(chuàng)建的,但它們是完全不同的。分支表示多個修訂版本而標(biāo)記只表示單個修訂版本。
本站點上您項目的 Subversion 存儲庫支持對您的源文件進(jìn)行分支和標(biāo)記。對于 Subversion 來說,標(biāo)記和分支屬于簡單實用的“復(fù)制”操作。
若要創(chuàng)建分支或標(biāo)記項目文件,請鍵入:
svn copy SRC DST -m "在此處鍵入您的信息"
請參見分支和合并。