全部速查表

SVN 命令速查

Subversion(SVN)命令快速參考:checkout、update、commit、branch/tag、merge、歷史檢視與倉庫管理——附常用參數與實作範例。

28 條命令

入門

svn checkout <url> [<dir>]

從倉庫取出工作副本;首次取得專案檔案時使用。

-r <rev> 指定版本;--depth empty|files|immediates|infinity

svn checkout https://svn.example.com/repo/trunk ./my-project
svn info

顯示工作副本或 URL 的資訊:URL、版本、最後修改時間等。

svn info .

日常操作

svn update

把工作副本與倉庫同步;可能會合併伺服端的變更。

-r <rev> 同步到指定版本;--accept postpone|base|mine-full|theirs-full|edit|launch

svn update --accept postpone
svn status

顯示工作副本狀態:修改、新增、刪除、未追蹤的檔案。

-u 顯示伺服端過時資訊;-v 詳細;--quiet 隱藏未追蹤項目

svn status -u
svn add <path>

將檔案或目錄排入下一次提交的加入清單。

-N 非遞迴(只處理目錄本身);--force 加入已在版本控管的項目

svn add src/utils/ helpers/
svn delete <path>

從工作副本移除檔案或目錄,並排定於下一次提交時刪除。

--keep-local 保留本地檔案(伺服端不刪除)

svn delete obsolete/old-config.json
svn commit -m "<msg>"

把本地修改連同日誌訊息送回倉庫。

-m 內聯訊息;-F <file> 從檔案讀取訊息;--no-unlock 保留鎖定

svn commit -m "feat: 新增登入表單驗證"
svn diff

顯示路徑或版本之間的 unified diff。

-r <rev1>:<rev2> 比較版本;-c <rev> 顯示某個版本帶來的變更;--diff-cmd / -x

svn diff -r HEAD~5:HEAD --summarize
svn revert <path>

捨棄本地修改,把檔案/目錄還原成 pristine 狀態。

-R 遞迴;--depth infinite

svn revert -R .

分支與標籤

svn copy <src> <dst>

在倉庫內以複製方式建立分支或標籤(廉價複製)。

-r <rev> 從指定版本複製;-m 訊息

svn copy ^/trunk ^/branches/feature-x -m "branch: feature-x"
svn switch <url>

讓工作副本指向其他分支/標籤,無需重新 checkout。

-r <rev> 切換到指定版本;--relocate 重寫 URL 前綴

svn switch ^/branches/feature-x
svn list <url>

列出倉庫某目錄下的項目,不取出檔案。

-v 詳細;-r <rev>

svn list -v ^/tags/

合併與衝突

svn merge <url[@rev]>

把兩個來源/分支之間的差異套用到工作副本。

-c <rev> / -r <rev1>:<rev2> 指定要合併的版本;--record-only 僅作合併追蹤

svn merge ^/trunk -c 12345
svn merge --reintegrate <url>

把 feature 分支合併回來源分支(舊式做法,1.8 之前)。

svn merge --reintegrate ^/branches/feature-x
svn resolve <path>

在 merge/update 之後解決衝突檔案。

--accept base|mine-full|theirs-full|working|theirs-conflict|theirs-full

svn resolve --accept theirs-full conflict.txt

歷史與檢視

svn log

顯示檔案或倉庫的提交日誌。

-r <rev1>:<rev2> 範圍;-l <n> 限制筆數;-v 詳細路徑;--xml

svn log -l 20 -v
svn blame <file>

逐行顯示作者與版本(praise/annotate)。

-r <rev> 以指定版本為基準標註;-v 含版本說明

svn blame src/index.ts | tail -20
svn cat <url>[@rev]

在不下載的情況下顯示指定 URL/版本的檔案內容。

svn cat ^/trunk/README.md@HEAD

屬性與鎖定

svn propset <prop> <value> <path>

為檔案或目錄設定屬性(如 svn:ignore、svn:executable、svn:mime-type)。

-F <file> 從檔案取值;--revprop 設定倉庫 revprop

svn propset svn:ignore "node_modules\n.DS_Store" .
svn propedit <prop> <path>

在編輯器中開啟屬性值以進行修改。

svn propedit svn:ignore .
svn lock <target>

鎖定檔案,避免其他用戶端提交(需要伺服端啟用相關設定)。

-m "原因";--force 強制取得別人的鎖

svn lock images/banner.png -m "發佈前編輯中"
svn unlock <target>

解除檔案或目錄上的鎖定。

--force 強制解除他人的鎖

svn unlock images/banner.png

倉庫與清理

svn cleanup

清理工作副本:移除鎖定、修正時間戳、完成未完成操作。

--diff3-cmd / --remove-unversioned 順便清掉未追蹤項目

svn cleanup /path/to/wc
svn export <url> [<dir>]

匯出乾淨的目錄樹(不含 .svn 中繼資料)——打包發佈很實用。

-r <rev> 指定版本;--force 覆寫既有檔案

svn export ^/tags/v1.2.0 ./release-1.2
svn import <path> <url> -m "<msg>"

把尚未加入版控的目錄樹一次性匯入倉庫。

--no-ignore 包含被忽略的檔案;--auto-props 套用 auto-props

svn import ./src ^/trunk -m "initial import"
svn relocate <from-prefix> <to-prefix>

改寫工作副本內儲存的倉庫 URL 前綴(伺服器搬家時使用)。

--strict 不符合的前綴會拒絕處理

svn relocate https://old.svn.example.com https://new.svn.example.com

Patch

svn diff > patch.diff

產生 unified diff,方便分享或用 svn patch 套用。

svn diff > /tmp/feature-x.patch
svn patch <patch-file>

套用 svn diff 產生的 unified diff 到工作副本。

--dry-run 預覽;--reverse-cmd

svn patch --dry-run /tmp/feature-x.patch

速查頁版本 1.0.0

適用於 SVN 1.10+