SVN相关技巧

显示日志限制条目数

显示提交日志时可以增加 --limit 参数限制条目数:

~# svn log --limit 4

获取版本库信息

显示最新的版本号:

~# svn info -r HEAD --xml | xmlstarlet sel -t -v '/info/entry/@revision'
6254

可以在版本库子目录中运行命令获取版本库的根路径:

~# svn info --xml | xmlstarlet sel -t -v '/info/entry/wc-info/wcroot-abspath'
/home/svn/trunk

显示最新提交时间:

~# svn info -r HEAD --xml | xmlstarlet sel -t -v '/info/entry/commit/date'
2026-01-07T10:39:46.503809Z

回滚没有提交的修改

增加 --recursive 参数可以递归子目录:

~# svn revert --recursive .

生成 patch 文件

例如指定两个版本生成 patch 文件:

~# svn diff -r 454:455 --git > test.patch

也可以:

~# svn diff -r 454:455 --patch-compatible > test.patch

外部仓库

获取当前目录下的外部仓库列表:

~# svn propget --recursive svn:externals
kernel - http://192.168.1.XXX/svn/kernel/trunk/YYY YYY

SVN 命令可以增加 --ignore-externals 参数忽略外部仓库,例如:

~# svn status --ignore-externals

处理特殊文件名

如果添加名称中带 @ 的文件,需要附加以 @ 结束,例如需要添加 lvm2_pvscan_systemd_red_hat@.service.in 文件:

~# svn add lvm2_pvscan_systemd_red_hat@.service.in@

自动更新文件

根据 svn status 结果自动更新文件:

~# svn status | grep "^[\?I]" | sed -e 's/[?I] *//' | sed -e 's/ /\\ /g' | xargs svn add
~# svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn delete

修改仓库地址

需要 Subversion 1.7 以上版本:

~# svn relocate svn://sub.someaddress.com.tr/project