SVN Cheatsheet

本文整理一些SVN的常用指令,方便查询使用。

命令行相对来说还是有些麻烦的,你也可以使用GUI去完成SVN操作。

Window上有TortoiseSVNopen in new window

Mac有SmartSVNopen in new window, 笔者当时用的就是SmartSVN,但有些功能需要付费,有的地方也不方便,所以就学习了命令行操作。

或者也可以用Emacs, 它集成了一套还不错的版本控制操作,Emacs结合命令行,基本上覆盖了我所有的使用场景了。

svn info

查看SVN仓库信息

>  svn info
Path: .

Working Copy Root Path: /Users/spike/Documents/svn/project/xxxx
URL: http://1.1.1.1/xxx/xxx/xxx
Relative URL: ^/xxxx
Repository Root: xxxx
Repository UUID: xxxxx
Revision: 28885
Node Kind: directory
Schedule: normal
Last Changed Author: xxx
Last Changed Rev: 28885
Last Changed Date: 2021-07-30 16:42:16 +0800 (五, 30  7 2021)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

svn checkout

获取到SVN仓库地址后,拉取仓库代码

svn checkout URL
1

svn list

当知道SVN仓库的URL,可以通过svn list查看仓库下包行那些Tags,哪些分支

svn list URL
1

svn cat

查看menu.jsp12343版本的内容

svn cat menu.jsp -r 12343
1

svn log

查看

查看最近10条提交记录

svn log -l 10
1

查看2020-01-01到2020-12-31,包含msg和msg2的日志

svne log  --search 'msg' --search-and 'msg2' -r {2020-01-01}:{2020-12-31}
1

查看某个提交涉及的改动文件

svn log -v -r <REV>
1

编辑

有时,提交信息错了,想去修改,可以通过以下命令:

svn propedit -r <REV> --revprop svn:log
1

<REV>是对应的日志序号,例如1234

这个命令会打开一个编辑器,让你编辑日志信息,但如果没有配置,就会出现一个报错:

svn: could not use external editor to fetch log message

可以去修改SVN的配置文件,指定编辑器, 在Mac中,路径一般是在~/.subversion/config, 找到editor-cmd, 指定为你喜欢的编辑器即可。

### Section for configuring external helper applications.
[helpers]
### Set editor-cmd to the command used to invoke your text editor.
###   This will override the environment variables that Subversion
###   examines by default to find this information ($EDITOR, 
###   et al).
editor-cmd = emacsclient
1
2
3
4
5
6
7

svn update

更新SVN仓库

svn update
1

svn commit

指定要提交的文件,然后提交

svn commit PATH...
1

但是,项目中文件可能很多,一个一个去指定还是有些麻烦的。SVN支持从文件读取路径,于是可以这么做:

  1. svn st -q | cut -c 9- > ~/target.txt 把改动的文件路径全部输出到一个文件中
  2. 打开~/target.txt, 看看有没有路径是需要删除的,有的话就删除,剩下的就是之后要提交的文件
  3. svn commit --targets ~/target.txt 使用~/target.txt的内容进行提交

参考SVN Commit specific filesopen in new window

svn diff

查看某个文件在某个版本的改动

svn diff -c <REV> <PATH>
1

查看menus.jsp在23304相对于23314的改动

svn diff menu.jsp -r 23304:23314
1

diff 美化

默认svn diff输出的内容颜色是一样的,只能通过+-判断那些是增加,那些是删除, 为了直观一些,可以安装colordiff进行美化

  1. brew install colordiff 安装
  2. svn diff menu.jsp -r 23304:23314 | colordiff 通过管道把输出交给colordiff 美化

具体可以参考制作一个更漂亮的svn Diff命令open in new window

尽管已经有了颜色区分了,但还是不太方便比对,可以参考以下两篇文章,使用比对工具进行查看:

  1. Is there any free svn diff tool for Mac Instead of use command line 'svn diff' open in new window

  2. Wrapper to use OS X FileMerge when calling svn diffopen in new window

其他

节省输入

如果你使用命令行操作SVN, 总是频繁的输入重复的命令会很烦恼吧?你 可以通过定制一些别名来节省操作。

例如编辑日志,每次都要输入svn propedit -r <REV> --revprop svn:log就很麻烦,也有可能记不住那么多参数。

笔者使用的是zsh, 在.zshrc中可以定义函数, 如

# edit svn log
function editSvnLog() {
    cd "/Users/spike/Documents/svn/project/xxxx/"
    svn propedit -r "$1" --revprop svn:log
    cd -
}
1
2
3
4
5
6

之后,我就可以调用editSvnLog xxxx去编辑日志,输入要修改的xxxx对应的提交信息了。

如果你用的是bash, 那就改.bashrc.

参考链接

Last Updated: 10/10/2021, 11:32:52 AM