本文整理一些 SVN 的常用指令,方便查询使用。
命令行相对来说还是有些麻烦的,你也可以使用 GUI 去完成 SVN 操作。
Window 上有 TortoiseSVN,Mac 有 SmartSVN 。
笔者当时用的就是 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)
svn list
当知道 SVN 仓库的 URL,可以通过 svn list
查看仓库下包行那些 Tags,哪些分支。
svn cat
查看 menu.jsp
在 12343
版本的内容。
svn cat menu.jsp -r 12343
svn log
查看
查看最近 10 条提交记录。
查看 2020-01-01 到 2020-12-31,包含 msg 和 msg2 的日志。
svn log --search 'msg' --search-and 'msg2' -r {2020-01-01}:{2020-12-31}
查看某个提交涉及的改动文件。
编辑
有时,提交信息错了,想去修改,可以通过以下命令:
svn propedit -r <REV> --revprop svn:log
<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
svn commit
指定要提交的文件,然后提交。
但是,项目中文件可能很多,一个一个去指定还是有些麻烦的。
SVN 支持从文件读取路径,于是可以这么做:
svn st -q | cut -c 9- > ~/target.txt
把改动的文件路径全部输出到一个文件中。- 打开
~/target.txt
, 看看有没有路径是需要删除的,有的话就删除,剩下的就是之后要提交的文件。 svn commit --targets ~/target.txt
使用~/target.txt
的内容进行提交。
svn diff
查看某个文件在某个版本的改动。
查看 menus.jsp
在 23304
相对于 23314
的改动。
svn diff menu.jsp -r 23304:23314
svn delete
把文件从 SVN 中移除。删除后需要提交。
svn delete file... svn delete directory...
其他
节省输入
如果你使用命令行操作 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 - }
之后,我就可以调用 editSvnLog xxxx
去编辑日志,输入要修改的 xxxx
对应的提交信息了。
如果你用的是 bash
, 那就改 .bashrc
。