SVN(Subversion)是一款广泛使用的版本控制系统,通过命令行可以高效地管理代码版本,以下是SVN命令行的详细使用方法,涵盖常用操作及场景。

SVN安装与环境配置
在使用SVN命令行前,需确保系统已安装SVN工具,Windows用户可从TortoiseSVN官网下载命令行工具,Linux/macOS用户可通过包管理器安装,如Ubuntu使用sudo apt-get install subversion
,安装完成后,打开终端或命令行工具,输入svn --version
验证安装是否成功。
仓库操作
SVN仓库是存储代码的核心,常用命令包括:
- 创建仓库
使用svnadmin create /path/to/repo
创建新仓库,例如svnadmin create /home/svn/project
会在指定路径生成一个包含conf
、db
等子目录的仓库。 - 导入项目
通过svn import /local/path file:///path/to/repo -m "Initial import"
将本地项目导入仓库,-m
参数用于添加提交日志。 - 导出仓库
若需下载整个仓库,使用svn export file:///path/to/repo /local/path
,该命令会检出到指定目录且不保留.svn版本信息。
日常协作命令
-
检出代码
svn checkout URL /local/path
(简写svn co
)从仓库检出到本地,例如svn co svn://localhost/project /home/user/project
。- 参数说明:
| 参数 | 作用 | 示例 | |------|------|------| |-r REV
| 检出指定版本 |svn co -r 100
| |--force
| 强制覆盖本地修改 |svn co --force
|
- 参数说明:
-
更新代码
svn update
(简写svn up
)将本地代码更新到最新版本,支持-r
指定版本或--accept
处理冲突。(图片来源网络,侵删) -
查看状态
svn status
(简写svn st
)显示本地文件修改状态,输出中表示未纳入版本控制,M
表示已修改,A
表示新增。 -
提交修改
svn commit -m "提交说明"
(简写svn ci -m
)将本地修改推送到仓库,需确保所有文件已通过svn add
纳入版本控制。
文件与目录管理
-
添加文件
svn add file.txt
将新文件纳入版本控制,递归添加目录使用svn add -R dir/
。 -
删除文件
svn delete file.txt
(简写svn del
)会标记文件为删除,提交后从仓库移除。 -
移动/重命名
svn move old_name new_name
(简写svn mv
)实现文件重命名或移动操作。 -
查看差异
svn diff file.txt
对比本地与仓库版本差异,svn diff -r 10:20 file.txt
对比两个版本间的差异。
分支与标签管理
-
创建分支
svn copy trunk_url branches/branch_name -m "Create branch"
通过复制主干创建分支,例如svn copy svn://localhost/project/trunk svn://localhost/project/branches/dev -m "Dev branch"
。 -
切换分支
svn switch URL
切换到指定分支,如svn switch svn://localhost/project/branches/dev
。 -
合并分支
svn merge branch_url trunk_url
将分支修改合并回主干,需在主干目录执行。 -
创建标签
svn copy trunk_url tags/tag_name -m "Create tag"
为特定版本打标签,类似分支操作。
日志与历史查询
-
查看日志
svn log file.txt
显示文件提交历史,-v
参数显示修改详情,-l 5
限制输出5条记录。 -
查看文件历史
svn blame file.txt
(简写svn praise
)显示每行代码的修改作者及版本。 -
查看信息
svn info
显示当前工作副本的仓库路径、版本号等信息。
冲突解决
当多人修改同一文件时可能产生冲突,冲突文件会标记为C
状态,解决步骤:
- 手动编辑冲突文件,删除
<<<<<<<
、、>>>>>>>
标记。 - 执行
svn resolved file.txt
标记冲突已解决。 - 提交修改。
高级技巧
- 忽略文件
在.svnignore
文件中添加忽略规则(类似.gitignore),如*.tmp
忽略所有临时文件。 - 钩子脚本
在仓库hooks
目录配置脚本(如pre-commit
)实现提交前检查。 - SSH协议访问
通过svn+ssh://
协议加密传输,如svn co svn+ssh://user@host/project
。
相关问答FAQs
Q1: SVN如何回退到指定版本?
A: 使用svn update -r 版本号
回退整个工作副本,或svn merge -r 当前版本:目标版本 .
合并差异后提交,当前版本为100,需回退到90,可执行svn merge -r 100:90 .
再提交。
Q2: SVN与Git的核心区别是什么?
A: SVN是中心化版本控制,依赖中央服务器,提交需联网;Git是分布式版本控制,本地有完整仓库,支持离线操作,SVN分支为独立目录,Git分支为轻量级指针,切换更快,Git的合并策略更灵活,适合大型开源项目。