天天看點

svn指令行

使用指令行 Subversion 通路項目源檔案

如果您參與的項目正在使用 Subversion 進行版本控制,您将需要使用 Subversion 通路和更改項目源檔案。您可以點選項目的左側導航窗格上的“Subversion”連結,線上浏覽源代碼以檢視該項目的目錄結構和檔案。

“Subversion”頁面顯示三個子目錄:branches/、tags/、trunk/ 和一個自述檔案。自述檔案可以使您對 Subversion 存儲庫有一個整體了解。您可以點選“通路選項”,檢視 Subversion 用戶端安裝說明。您的本地計算機上必須安裝有 Subversion 用戶端。

擷取項目的本地工作副本:svn checkout

若要擷取最新源檔案的“工作副本”,您必須首先簽出這些源檔案,這一過程會将檔案從存儲庫複制到您的系統中。在您的外殼程式或終端用戶端,請鍵入:

svn checkout https://(項目名稱).(域)/svn/(項目名稱)/(DIR) (項目名稱) --username [在此處輸入使用者名]

當系統提示您時輸入您的使用者密碼。此密碼應與您在本站點中的使用者帳号的密碼相同。不指定目錄将簽出整個項目源代碼。您可能希望簽出“trunk/”目錄,因為此目錄具有工作“www/”檔案夾。

轉換:--revision (-r) REV, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見基本工作周期、初始簽出、工作副本。

注意:如果站點未啟用 SSL(安全套接字層),則在執行 Subversion 操作時,請使用 http 而不是 https。例如,若要從項目的存儲庫中簽出最新的源代碼,請使用以下指令:

svn checkout https://(項目名稱).(域)/svn/(項目名稱)/(DIR) (項目名稱) --username [在此處輸入使用者名]

處理 Subversion 存儲庫中的檔案

從項目存儲庫中簽出本地副本後,您可以在本地計算機上編輯現有檔案、建立新檔案和目錄、以及删除檔案。在您将所做的任何更改送出回 Subversion 存儲庫之前,這些更改隻對項目檔案的本地副本起作用。

将工作副本中的檔案/目錄添加到存儲庫中:svn add

在您第一次在工作目錄中建立并編輯新檔案後,可以将此檔案添加到存儲庫中,或添加一個目錄,目錄中有無内容均可。

svn add FILENAME/DIR。

這樣就會在您的工作副本中添加檔案/目錄,并安排它們以添加到存儲庫中。您下次送出時,會上載這些檔案/目錄,并将它們添加到存儲庫中。如果您了添加内容,但在送出前又改變了主意,則可以使用 svn revert 取消添加内容的安排。

轉換:--targets FILENAME, --non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props

請參見添加檔案/目錄示例。

檢視帶有修訂和作者資訊的特定檔案的内容:svn blame

若要線上檢視指定檔案的作者和修訂資訊,請鍵入:

svn blame FILENAME

每行文本的開始處都以上次更改該行的作者(使用者名)和修訂版本号作為批注。

轉換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

檢視特定檔案的内容:svn cat

有時,與存儲庫相比較,您的工作副本可能已過時;或者您可能已修改了本地工作副本。在這些情況下,在送出更改或決定編輯您的工作副本之前,您會希望檢視指定檔案的内容差異。運作 svn cat FILENAME 将自動從存儲庫中取出 HEAD 修訂版本。這條子指令主要用于檢索具有較舊修訂版本号的檔案,并将其顯示在螢幕上。通過在此站點上浏覽項目源代碼,也可以執行相同的操作。

轉換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

清理工作副本:svn cleanup

有時可能會出現“工作副本已鎖定”錯誤。若要删除鎖定,并遞歸清理工作副本,請使用 svn update。

轉換:--diff3-cmd CMD, --config-dir DIR

請參見 svn cleanup。

複制工作副本或存儲庫中的檔案或目錄:svn copy

在項目中,您可能需要用到過去的舊文檔。例如,您可能想要使用一個已存在的 HTML 檔案,使用其代碼作為參考以在建立新内容時保持産品外觀和感覺。建立檔案時,您無需從頭開始,隻需使用 svn copy 複制此檔案,然後将其另存為其它名稱并更改其内容。您可以從存儲庫将檔案複制為本地工作副本,也可以将本地工作副本複制回存儲庫檔案。您還可以在本地工作副本内部複制檔案。Subversion 不支援在存儲庫之間進行複制。可使用 svn copy SRC DST 完成此操作。

轉換:--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 可安排删除檔案。僅當您送出時,才會在存儲庫中将該檔案實際删除。

轉換:--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 顯示工作副本中的指定檔案相對于存儲庫中相應檔案所做的本地修改。在指令提示符處,請鍵入:

svn diff (檔案的路徑) (項目存儲庫的 URL)

例如,若要将本地修改後的檔案“index.html”與項目存儲庫中的相應檔案進行比較,請鍵入:

svn diff $SRC/...../index.html https://(項目名稱).(域)/svn/(項目名稱)/trunk (項目名稱) --username [在此處輸入使用者名]

除此之外,您也可以轉到該檔案所屬的目錄,并鍵入:

svn diff (FILENAME)

該指令将顯示差異,并且帶有修訂版本号。

轉換:--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。

在本地計算機上導出空目錄樹:svn export

在您的本地計算機上,可以從項目存儲庫或本地工作副本内部提取一個無版本的副本,也稱為空目錄樹。若要從存儲庫中獲得較舊修訂版本的空目錄,請鍵入:

svn export [-r REV] [PATH]

該指令将從 URL 指定的存儲庫中的修訂版本 REV 位置(如果指定,否則從 HEAD 位置)将空目錄樹導出到 PATH。如省略 PATH,則該 URL 的最後一部分将用作本地目錄名稱。除此之外,您也可以在本地計算機内部,從一個工作副本(由 PATH1 指定)向另一工作副本(由 PATH2 指定)導出空目錄樹。這将保留所有的本地更改,但不會複制版本控制中的檔案。若要執行此操作,請鍵入:

svn export PATH1 PATH2

轉換:--revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

擷取有關 Subversion 的幫助:svn help

Subversion 可以在指令行界面為您提供幫助。若要獲得有關特定子指令的幫助,請鍵入:

svn help [SUBCOMMAND...]

轉換:--version, --quiet (-q)

将您的更改提供給 SVN 存儲庫

對檔案和/或目錄進行本地更改後,您必須向 SVN 存儲庫送出這些更改。

送出您的更改:svn commit

若要向共享存儲庫送出您的更改,請鍵入:

svn commit -m "請在此處鍵入您的理由"

如果您不包括對該檔案更改的描述,系統将提示您調用檔案編輯器添加描述,然後 svn 才能完成送出操作;否則将會出現“送出失敗”錯誤。所有的送出都會被自動記錄,并釋出到項目的送出讨論中。

轉換:--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。

将無版本的檔案或樹導入到項目存儲庫中:svn import

您可以使用 svn import 将無版本的檔案或樹遞歸送出到項目存儲庫中。将根據需要在存儲庫中建立父目錄。使用下面的指令可以從 PATH 向 URL 遞歸送出副本。如果省略 PATH,将認為其為“.”。

svn import [PATH] URL

示例:若要在您的本地計算機上建立帶有一個檔案的無版本目錄 (D)。請點選項目左側導航窗格中的“Subversion”連結,找到 Subversion 頁面。請注意,“浏覽源代碼”下未列出 NEWDIR。若要将 D 導入項目存儲庫,請鍵入:

svn import -m "請在此處鍵入您的資訊" D http://(項目名稱).(域)/svn/(項目名稱)/NEWDIR

重新整理該頁面。請注意,此時“浏覽源代碼”下列出了 D。點選 D 檢視該檔案。

轉換:--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

列印有關工作副本中路徑的資訊:svn info

有時,您将需要有關工作副本中檔案的具體資訊,以執行某些子指令。鍵入 svn info,将列印出詳盡且有用的資訊,這些資訊涉及工作副本中的工作副本路徑中的項,其中包括:路徑、名稱、URL、修訂版本、節點類型、上次更改、作者、上次更改修訂版本、上次更改日期、上次更新的文本、上次更新的屬性以及校驗和。

轉換:--targets FILENAME, --recursive (-R), --config-dir DIR

檢視存儲庫中的目錄項清單:svn list

在開始處理項目或取出“工作副本”之前,您可能希望檢視項目存儲庫中的内容(即目錄和檔案),或檢視本地工作副本中的目錄項。在指令提示符處鍵入 svn list [TARGET...],也可以檢視這些内容。除此之外,您也可以找到項目中的“軟體配置管理”頁,檢視項目存儲庫。

轉換:--revision (-r) REV, --verbose (-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

檢視送出日志資訊:svn log

如果要檢視“工作副本”或存儲庫中檔案/目錄的各個檔案/目錄曆史,以跟蹤修訂資訊,請鍵入:

svn log [PATH]

該指令會顯示出檔案/目錄的修訂資訊,從最近所做的修訂版本開始顯示送出資訊和作者姓名等資訊。除此之外,您也可以使用該站點,檢視項目存儲庫中各個檔案的送出日志資訊。請點選項目左側導航窗格中的“Subversion”連結。将出現 Subversion 頁。搜尋“浏覽源代碼”的目錄中的檔案,然後點選檔案名。這時将會顯示一個送出日志資訊頁面。

轉換:--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 将存儲庫中最新版本的檔案合并到您的工作副本中。

轉換:--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、解決沖突(合并其他人的更改)、分支和合并:常見合并使用案例、合并最佳實踐。

使用存儲庫

建立新目錄:svn mkdir

若要在您的工作副本中建立新目錄,請鍵入:

svn mkdir PATH

若要在您的項目存儲庫中建立新目錄,請鍵入:

svn mkdir URL

PATH 或 URL 的最後一部分決定目錄名稱。在立即送出時在存儲庫中建立目錄,是以還需要一條送出資訊

轉換:--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 在工作副本或項目存儲庫内部移動檔案或目錄。此指令等效于在使用 svn copy 後,再使用 svn delete。在工作副本内部移動檔案或目錄,不僅會移動該檔案或目錄,而且還将安排它以便于下次送出時進行添加。在項目存儲庫内部移動檔案或目錄屬于封閉單元式送出,是以需要一條送出資訊。

轉換:--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 具有很多具體屬性,這些屬性影響或決定其行為。您可以修改、送出和撤消屬性更改,就像對檔案内容所執行的操作一樣。您還可以從本地工作副本或項目存儲庫的檔案、目錄或修訂版本中,删除、編輯、列印、列出以及設定屬性。

請參見 屬性、無版本屬性、中繼資料屬性、svn propdel、svn propedit、svn propget、svn proplist、svn propset、Hook 腳本。

解決沖突:svn resolved

更新本地工作副本時,可能會遇到沖突。您需要解決此沖突。解決沖突後,鍵入 svn resolved PATH...,通知工作副本該沖突已“解決”。

轉換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

請參見解決沖突(合并其他人的更改)。

撤消您的更改:svn revert

使用 Subversion 時,您會發現 svn revert PATH... 等效于 Windows 中的 Ctrl Z。您可以:

•撤消本地工作副本中的任何本地更改,進而解決沖突狀态。

•撤消工作副本中的條目内容及屬性更改。

•取消任何進度安排操作,如添加檔案、删除檔案等。

注意,如不提供目标,會導緻工作副本中的更改丢失。

轉換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

擷取檔案/目錄的狀态:svn status

在版本控制中,将更改送出到項目存儲庫之前最好對其進行審查。可以運作 svn status 列印工作副本中的檔案和目錄的狀态。列印結果為八列編碼輸出。由于每列都有詳盡的圖例,若要從此輸出中得出“無錯誤”的結論幾乎不可能。若要使此任務更加簡單,并同時可看到示例,請在指令提示符處鍵入 svn help status。

轉換:--show-updates (-u), --verbose (-v), --non-recursive (-N), --quiet (-q), --no-ignore, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir

請參見檢查你的更改。

轉換工作副本:svn switch

可以使用 svn switch URL [PATH] 更新工作副本,以鏡像新的 URL。您還可以将工作副本或部分工作副本移動到新的分支。您可以将此子指令用作分支的快捷方式。

轉換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --relocate, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見轉換工作副本、分支和合并以及 svn switch。

更新工作副本:svn update

為了進行更好的版本控制,建議您每天用項目存儲庫更新本地工作副本,請使用:

svn update [PATH...]

列出的已更新條目以及它們的目前狀态顯示如下:

•A = 已将一個檔案添加到您的工作副本中。

•U = 已更新您的工作副本中的一個檔案。

•D = 已從您的工作副本中删除一個檔案。

•R = 已替換您的工作副本中的一個檔案。

•G = 已成功合并了一個檔案。

•C = 一個檔案已合并了必須手動解決的沖突

轉換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見更新你的工作副本、手動合并沖突。

分支和标記

項目的主幹通常用作開發主線,而分支通常用作主線的變更。分支是正在進行的開發線。在軟體開發生命周期中,如果軟體産品的釋出版本已到期,經常會用到分支,使測試者可以使用候選版本,使新的開發可以繼續進行,不受測試的限制。分支還用于實驗性工作,以及完成代碼重寫。标記是将一組檔案修訂版本标記為整體的方式。雖然分支和标記都是使用 svn copy 子指令建立的,但它們是完全不同的。分支表示多個修訂版本而标記隻表示單個修訂版本。

本站點上您項目的 Subversion 存儲庫支援對您的源檔案進行分支和标記。對于 Subversion 來說,标記和分支屬于簡單實用的“複制”操作。

若要建立分支或标記項目檔案,請鍵入:

svn copy SRC DST -m "在此處鍵入您的資訊"

請參見分支和合并。

如果不小心送出了錯誤的版本(r221-r222), 而我們又不想在版本庫保留r222, 但是svn每個修訂版本都是不可變的目錄樹, 是以隻有把所需要的版本dump再建立導入

svnadmin dump /var/svn/repos/ -r 1:221 > repos-1-221.dmp 2>repos-1-221-dump.log &

svnadmin create /var/svn/reposnew

svnadmin load /var/svn/reposnew/ < repos-1-221.dmp > repos_load.log 2>repos_load_err.log &

svn up -r221

svn switch --relocate file:///var/svn/repos/trunk file:///var/svn/reposnew/trunk

svn up

http://www.lsproc.com/blog/add_auto_props_in_subversion/

繼續閱讀