svn - Subversion command line client tool
这里讲SVN命令行客户端工具如何使用,不涉及SVN服务器如何部署。
创建新分支
1 | svn copy src_url [-r version] dst_url [-m "message"] [--username your_name --password your_password] |
如果不带-r version
,则默认使用src_url的最新版本。version为数字,版本号。
建议所有含提交功能的命令都要带-m message
,这样才能通过log直接明了地看出这个版本提交了什么修订。
下载代码
1 | svn checkout url -r version |
从服务器仓库下载代码到本地,成为本地工作副本。
升级到新版本
1 | svn update -r version |
查看工作副本状态
1 | svn status |
第一列表示文件的状态:
,没有修订
A
,添加C
,冲突,需要解决冲突状态,才能正常提交代码。D
,删除I
,忽略M
,有修改?
,没有版本控制,在工作副本添加文件或目录之后,需要使用svn add your_path
才能加该文件加到版本控制。!
,文件丢失,如果不是使用svn delete
删除文件或目录,会产生此状态。
添加新文件或目录到版本控制
1 | svn add file1 file2 ... |
使用Linux命令或在窗口下添加文件或目录后,需要使用本命令,才能将添加的文件或目录加入版本控制,svn提交时才能将该文件或目录提交到服务器。
删除文件或目录
1 | svn delete your_path |
如果仅仅是手动使用rm命令或窗口下删除工作副本内的文件或目录,该删除并不会记录svn的状态。可能会导致提交代码时,遗漏了删除文件或目录。因此建议删除svn工作副本内的文件或目录时,使用本命令进行操作。
重命名文件或目录
1 | svn move src dst |
问题:svn move
重命名文件之后,再用svn diff
打patch会发现只能打进删除文件的补丁,没有新增文件的内容,目前还不清楚svn move
要如何打patch。例如:
1 | sunnogo@a3e420:~/src/test$ svn status |
查看工作副本信息
1 | svn info |
能够查看到本工作副本的url、版本等信息。
生成patch
1 | svn diff [file_list] |
将工作副本的修订以patch的形式输出,常使用svn diff > your_patch.patch
输出patch。
打某个版本的patch
1 | svn diff -r ver1:ver2 [file_list] |
查看某两个版本中的修订,如果ver1大于ver2,则所输出的diff是回退代码的patch;如果ver2大于ver1,则所输出的patch是合并代码的patch。
应用补丁
1 | svn patch your_patch.patch |
提交代码
1 | svn commit [-m message] [file_list] |
如果没有带文件列表,则把工作副本的所有修订都提交,如果有带文件列表,则只提交文件列表中对应文件的修订。
合并代码
1 | svn merge -r ver1:ver2 src_url working_copy_path |
可将任意版本的任意修订合并到工作副本中。如果ver1小于ver2,表示合并src_url分支ver1到ver2的修订到本地工作副本;如果ver1大于ver2,表示回退修订。
另外也可以操作服务器仓库,把working_copy_path直接换成目的分支的url即可,但是这种做法比较危险,不建议新手直接使用。
注意,svn merge
后的commit需要user同时拥有源分支和目的分支的权限才能提交。
回退工作副本的修订
1 | svn revert file1 file2 ... |
查看log
1 | svn log [OPTIONS] [FILE_LIST] |
会默认输出所有的log,不实用,需要使用参数过滤才能得到我们想要的内容。
默认只查看工作副本及以前版本的log。
常用参数
-l n
,只输出n个log信息;-v
,显示修订的文件,默认不显示;-r ver
,显示特定版本的log;-r ver1:ver2
,显示版本ver1到ver2之间所有提交的log;-r {2013-01-01}:{2013-01-11}
,显示日期间所有提交的log,-r选项的版本号和日期可以混用;--diff
,除显示log信息外,还直接输出修订的内容;--search
,根据当前输出的log信息,按关键字过滤log,该关键字可以匹配输出信息的任意字符串,比如可匹配到提交者、提交的log信息,如果带-v
选项还可以匹配到修订的文件等。--stop-on-copy
,只显示当前分支的修订的log,不会回溯源基线分支修订的log。比如分支branch基于tags分支版本100创建,此时branch分支的svn log会默认显示tags分支版本100以前所有修订的log,而如果带上本选项,则只会显示branch分支自己修订的log。
svn版本信息导入execl表
方法来自stackoverflow
Use the following Subversion command to create an xml file out of the repository’s log:
svn log -v --xml > repository_log.xml
,还可以根据需求配搭其他的svn log
选项。- Import the xml file into an Excel spreadsheet (not sure if it will work with LibreOffice/OpenOffice).
- You can then save it as a spreadsheet.
问题汇总
提示 svn: Can’t convert string from ‘UTF-8’ to native encoding:
处理:(来自 https://blog.csdn.net/ssergsw/article/details/14169987),在环境变量中添加 export LC_ALL=zh_CN.UTF-8
。