Cheat Sheet速查表
跳转到主要内容

Subversion (SVN) 常用命令与状态码全景速查表

适用范围。 适用于 Apache Subversion (SVN) 1.8 至 1.14+ (LTS) 经典集中式版本控制系统。命令示例中以 <path> 或 <url> 表示占位符,执行时替换为实际路径;^/ 代表仓库根路径(Repository Root URL)。

Subversion 是经典的集中式版本控制系统(CVCS),采用单调递增全局版本号(Revision)与基于目录树的快照机制。本速查表整合了日常高频操作、分支合并规范、状态码速查以及仓库管理维护命令。

🔗 关联版本控制与命令行速查:Git 核心命令速查表 · Linux 命令行速查表 · Bash 命令速查表


1. 核心工具组件与网络协议

核心命令行工具集

工具组件定位与核心功能典型使用场景
svn核心客户端命令行程序日常代码检出、修改、提交、分支与查看状态
svnversion提取当前工作副本的综合版本号编译构建脚本中动态注入构建版本号
svnadmin服务端仓库管理维护工具创建仓库、转储备份、恢复还原、数据校验
svnlook只读式直接探查服务端仓库服务端钩子脚本(Hook Scripts)中预检提交内容
svnsync仓库增量单向镜像同步工具异地容灾备份、只读从库镜像搭建
svnrdump远程仓库转储与恢复工具无需服务端物理文件权限,通过网络执行备份
svndumpfilter转储数据流过滤工具仓库迁移时剔除特定路径或拆分多项目
svnserve独立专属 SVN 协议服务端守护进程轻量级局域网或私有化部署服务
mod_dav_svnApache HTTP Server 的 WebDAV 模块基于 HTTP/HTTPS 协议的企业级发布与权限集成

仓库访问协议 URL 方案

协议前缀说明与底层依赖默认端口 / 典型路径
file://本地文件系统直接访问(单机或 NFS 挂载)file:///var/svn/repos/project
http://基于 WebDAV/HTTP 协议(Apache 代理)80 端口,明文传输
https://基于 WebDAV/HTTPS 协议(SSL/TLS 加密)443 端口,生产推荐
svn://svnserve 独立服务的私有二进制协议3690 端口,性能高效
svn+ssh://通过 SSH 隧道封装的 svnserve 协议22 端口,免额外开端口,高安全性

2. 工作副本检出、更新与纳管

检出 (Checkout) 与更新 (Update)

# 检出远程仓库至当前目录(或指定目录)
svn checkout <url> [target_dir]
svn co <url> [target_dir]

# 更新当前工作副本至最新版本 (HEAD)
svn update
svn up

# 更新工作副本至指定版本号 (例如版本 42)
svn update -r 42

# 仅更新指定文件或子目录
svn update path/to/file_or_dir

# 控制更新深度 (--depth: empty | files | immediates | infinity)
svn update --set-depth immediates

纳入版本控制 (Add) 与撤销未提交变动 (Revert)

# 递归纳管新增文件或文件夹
svn add <path>

# 递归纳管当前目录下所有未版本化文件(受 svn:ignore 过滤)
svn add *

# 强制递归将已有版本目录中的新文件纳入版本控制
svn add * --force

# 撤销单个文件或目录的未提交修改(恢复至 BASE 状态)
svn revert <path>

# 递归撤销整项目或指定目录下的所有未提交修改
svn revert -R <path>
svn revert --depth infinity <path>

3. 提交变更与导入

提交修改 (Commit)

# 提交指定路径变动并附带日志信息
svn commit -m "feat: 完善用户鉴权模块" <path>
svn ci -m "fix: 修复空指针异常"

# 从指定文本文件中读取提交日志
svn commit -F log_message.txt

# 非递归提交(仅提交当前目录本身或顶层修改,现代推荐使用深度参数)
svn commit --depth files -m "chore: 更新根目录配置文件"

导入外部未版本化项目 (Import)

# 将本地非版本控制目录直接导入为仓库新版本(本地目录不会变成工作副本)
svn import /path/to/local/src ^/trunk -m "initial import of project"

4. svn status 状态码全景速查

svn status(缩写 svn st)输出采用**固定列宽(固定位置字符)**格式,每一列代表不同维度的元状态:

# svn status 输出格式(前 7 列为状态指示位,后跟路径)
列1(项内容) 列2(属性) 列3(锁状态) 列4(历史调度) 列5(切换) 列6(仓锁) 列7(树冲突)   文件路径
M           M                                                       src/main.py

第一列:文件与目录项内容状态

状态码英文状态名中文说明产生原因与处理建议
' 'None无任何变动内容与版本库 BASE 状态完全一致
AAdded预定添加已执行 svn add,等待 commit 提交入库
DDeleted预定删除已执行 svn delete/rm,提交后从仓库中移除
MModified内容已修改本地物理文件文本或二进制内容发生了变化
RReplaced替换状态文件被删除后又添加了同名新文件
CConflicted内容冲突更新时服务端版本与本地未提交变动发生重叠冲突
XExternal外部引用定义通过 svn:externals 挂载的外部目录或文件
IIgnored已被忽略匹配 svn:ignore 或全局忽略列表的未跟踪文件
?Unversioned未版本化本地新生成的文件,尚未加入 SVN 跟踪
!Missing文件丢失物理文件被直接 rm 删除(非 svn rm),或不完整检出
~Type Mismatch节点类型不匹配原本是文件却被改成了同名目录(或反之)

第二列:属性状态 (Properties)

状态码说明
' '属性未发生任何变动
M属性已被修改(如修改了 svn:ignore 或 svn:executable)
C属性发生冲突(服务端与本地同时修改了同一属性)

第三至第七列:辅助与扩展状态

列位置状态码说明
第 3 列L工作副本目录被锁定(通常因操作中断,需执行 svn cleanup)
第 4 列+伴随历史记录的调度(如分支拷贝、移动生成的新节点)
第 5 列S路径已被切换到不同的分支 URL(通过 svn switch 产生)
第 6 列K / O / T / B文件锁定状态(K: 本地持有锁;O: 他人持有锁;T: 锁被偷取;B: 锁已被破坏)
第 7 列C树冲突 (Tree Conflict):本地修改与远程重命名/删除产生的结构性冲突
# 仅查看有变动的项状态(静默模式,过滤未版本化文件)
svn status -q

# 详细输出(显示每个项的当前版本号与最后提交人)
svn status -v

# 联网检查远程是否有更新(显示远程最新版本差异,用 * 标识)
svn status -u

5. 审查变更、历史追溯与内容查看

差异比对 (Diff)

# 对比当前工作副本与本地 BASE 版本的差异
svn diff
svn diff path/to/file

# 对比指定两个版本之间的差异
svn diff -r 100:105

# 对比指定版本与当前 HEAD 的差异
svn diff -r 100:HEAD

# 对比两个远程分支或 URL 的差异
svn diff ^/trunk ^/branches/release-1.0

日志历史与责任追溯 (Log & Blame)

# 查看当前路径的提交日志
svn log
svn log -l 10                     # 仅显示最近 10 条日志
svn log -r 150                    # 查看版本 150 的具体日志
svn log -r 100:200                # 查看版本区间日志
svn log -v                        # 显示附带变动文件清单的详细日志

# 逐行追溯代码作者、版本号与提交时间 (Blame / Praise / Annotate)
svn blame path/to/file
svn annotate path/to/file -r 80   # 查看版本 80 时的责任人

内容查看与元信息 (Cat & Info)

# 直接在终端输出指定版本的文件内容(不检出到磁盘)
svn cat path/to/file
svn cat -r 50 ^/trunk/src/config.json

# 查看当前工作副本或远程仓库的详细元信息(URL、UUID、Revision等)
svn info
svn info ^/trunk

6. 分支、标签与合并规范

SVN 推荐的标准仓库目录拓扑架构:

  • trunk/:主干开发分支
  • branches/:特性或发布分支目录(如 branches/feature-login, branches/release-1.2)
  • tags/:只读基线标签(如 tags/v1.0.0)

创建分支与标签 (Cheap Copy)

SVN 的分支与标签在底层均为廉价拷贝(O(1) 指针树快照):

# 从主干创建新的特性分支
svn copy ^/trunk ^/branches/feat-oauth -m "branch: 创建 OAuth 特性分支"

# 从主干(或分支)打出正式发布标签
svn copy ^/trunk ^/tags/v1.0.0 -m "tag: 发布 1.0.0 正式版"

# 将当前工作副本直接切换到目标分支
svn switch ^/branches/feat-oauth

分支合并与反向回滚 (Merge)

# 在特性分支工作副本中,同步主干最新变更(自动利用 Mergeinfo 跟踪)
svn merge ^/trunk

# 在主干工作副本中,将完成的特性分支合回主干(2-URL 差异或分支合入)
svn merge --reintegrate ^/branches/feat-oauth   # 经典 1.7 之前
svn merge ^/branches/feat-oauth                 # 1.8+ 自动识别

# 反向合并回滚提交(撤销已提交到远程仓库的特定版本,如回滚 r108)
svn merge -c -108 .
svn commit -m "revert: 回滚 r108 引入的异常变更"

7. 冲突解决与工作副本维护

冲突处理机制

当更新出现冲突时,SVN 会在磁盘生成 file.mine、file.rOLD、file.rNEW 临时文件:

# 启动交互式冲突解决工具
svn resolve path/to/conflicted_file

# 使用指定的解决策略非交互式标决冲突:
# 采用本地修改覆盖远程:mine-full (mf)
svn resolve --accept mine-full path/to/file

# 丢弃本地修改采用远程版本:theirs-full (tf)
svn resolve --accept theirs-full path/to/file

# 保留已手动编辑标记好的本地工作文件:working (w)
svn resolve --accept working path/to/file

目录锁定与工作副本清理 (Cleanup)

# 清理中断操作留下的工作副本写锁定,恢复一致状态
svn cleanup

# 递归清理工作副本并清理未跟踪的临时垃圾文件 (1.9+)
svn cleanup --remove-unversioned --remove-ignored

文件锁机制 (Lock / Unlock - 适用二进制大文件)

# 对不可合并的二进制资产(如 PSD、3D模型、Excel)上独占锁
svn lock design/banner.psd -m "正在编辑主图素材"

# 解除独占锁
svn unlock design/banner.psd

# 强制偷取锁(破除同事遗留的僵死锁定)
svn lock --force design/banner.psd

8. 版本属性管理 (Properties)

SVN 允许为每个文件或目录关联键值对元数据:

# 列出路径上定义的所有属性
svn proplist [path]
svn pl -v [path]

# 读取指定属性的值
svn propget PROP_NAME [path]
svn pg svn:ignore .

# 设置属性值
svn propset PROP_NAME "PROP_VALUE" [path]
svn ps svn:executable ON script.sh

# 编辑属性(调用默认编辑器)
svn propedit svn:ignore .

# 删除指定属性
svn propdel PROP_NAME [path]

常用内置标准属性清单

内置属性名作用与格式典型示例
svn:ignore目录级忽略模式列表(每行一个模式)设置 node_modules、*.log、target/
svn:global-ignores继承式全局忽略列表(1.8+)在根目录设置全子树生效的忽略项
svn:executable标记文件在检出时赋予可执行权限svn ps svn:executable ON run.sh
svn:eol-style换行符跨平台转换策略native(自适应系统)、LF、CRLF
svn:keywords自动展开文件内的版本关键字Id Date Revision Author(代码内写 $Id$)
svn:externals跨仓库/跨项目目录挂载(多模块管理)vendor/lib ^/subprojects/lib@200

9. 仓库运维与底层管理 (svnadmin)

svnadmin 是运行在服务端宿主机本地的仓库级管理员工具:

管理命令作用说明典型执行示例
svnadmin create初始化建立新的 SVN 仓库svnadmin create /var/svn/repo
svnadmin dump导出仓库全量或增量转储备份流svnadmin dump /var/svn/repo > backup.dump
svnadmin dump /var/svn/repo -r 100:200 --incremental > delta.dump
svnadmin load将转储文件还原恢复至目标仓库svnadmin load /var/svn/new_repo < backup.dump
svnadmin hotcopy热备份运行中的仓库(无须暂停服务)svnadmin hotcopy /var/svn/repo /backup/repo_hot
svnadmin verify全量校验仓库数据块与校验和完整性svnadmin verify /var/svn/repo
svnadmin setlog覆写特定修订版本的提交日志svnadmin setlog /var/svn/repo -r 42 new_msg.txt (需配置 pre-revprop-change 钩子)
svnadmin recover修复异常崩溃或损坏的仓库事务状态svnadmin recover /var/svn/repo

10. 常用命令行参数缩写与深度选项

命令行常用短选项对照

短选项全拼选项含义与说明
-m--message指定提交或操作的日志信息文本
-F--file从指定磁盘文本文件中读取日志信息
-r--revision指定单版本或版本区间(如 -r 12、-r 10:20、-r HEAD)
-c--change指定特定单个变动(-c 42 等同于 -r 41:42;-c -42 表示反向撤销)
-q--quiet静默模式,仅输出最核心的信息或错误
-v--verbose详细冗长模式,输出完整明细
-R--recursive递归处理子目录(已由 --depth 细化扩展)
-N--non-recursive非递归处理(旧版语法,现代推荐 --depth empty/files)
-u--show-updates联网比对远程服务端,标出过期需更新项

--depth 深度控制参数取值

深度取值行为说明
empty仅包含目标目录自身,不包含任何子文件与子目录
files包含目标目录及其下的直接子文件,不深入子目录
immediates包含目标目录、直接子文件以及直接子目录的第一级节点(深度为 1)
infinity完整递归整个目录树的所有后代(默认行为,等同于 -R)