SVN常用命令

基本操作

  • 更新代码: svn up

  • 提交代码: 先执行add再commit,就是同git类似:svn add file, 之后svn commit -m "LogMessage" file

  • 删除文件:先delete再commit,svn delete test.php 然后再svn ci -m 'delete test file'。这样就解除了SVN对这个文件的管理,但是svn 删除某文件前,应当保证该文件的修改已经提交,否则会删除失败

  • 未提交代码时,取消对代码修改:如果在当前目录下,要撤销某文件的修改:svn revert file.cpp 如果撤销本目录所有文件修改:svn revert -R .,撤销成功会有提示,否则就是失败

  • 查看提交历史:svn log file.cpp,查看目录的历史也是这个,但版本可能是不连续的,因为某些版本只改一个文件,文件夹的版本没有改变

  • 查看工作目录的SVN信息:Win或Linux系统下,在工作目录下,打开命令行执行svn info,可用于relocate或update前后确认目录是否更新。

更改SVN默认编辑器

一般在Linux上,SVN用的是nano编辑器,非常不方便,修改使用命令svn update-alternatives --config editor

星号标出了当前使用的编辑器,选择4就改成了VIM

还原到某个版本

先用svn log查看文件的提交历史,找到需要的版本,比如我们打算把test.cpp从966版本退回到955

目前有三个版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
 svn log test.cpp 
-------------------------------
r966 | user | 2019-03-25 09:31:29 +0800 (一, 2019-03-25) | 1

3
-------------------------------
r965 | user | 2019-03-25 09:31:16 +0800 (一, 2019-03-25) | 1

2
-------------------------------
r950 | user | 2019-03-22 11:19:08 +0800 (五, 2019-03-22) | 1

------------------------------------------------------------------------

先看一个常见的 错误用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
svn up test.cpp -r 950
#正在升级 'test.cpp':
U test.cpp
#更新到版本 950。

cat test.cpp // 950版本的内容
#111111111

// 这样返回到旧版本,但修改后再提交会失败
vim test.cpp // 做修改
svn ci test.cpp -m "4" //再提交
# ---------结果会报错---------
# 正在发送 test.cpp
# 传输文件数据 .svn: E155011: 提交失败(细节如下):
# svn: E155011: 文件“/home/user/work/workspace/src/test.cpp” 已经过时
# svn: E170004: File '/workspace/src/test.cpp' is out of date

正确做法

  1. 先更新到最新版本, 版本966
  2. 反向合并到旧版本

    现在内容是950,但版本是966

  3. 现在修改文件再提交,版本就是967了

同样地,反向合并目录下所有改动过的文件: svn merge -r 966:950 .

查看文件和目录的状态

svn status path? 不在svn的控制中;M 内容被修改;C 发生冲突;A 预定加入到版本库;K 被锁定

最好除了?外不要有其他标志

删除分支

右击已经存在的SVN项目->repo browser,弹出框的左边选择需要删除的分支右击->delete

锁定服务器文件

有的特殊文件不适合修改,所以锁定,防止各个客户端的提交修改,使用命令svn lock file

命令行实现relocate

命令:

1
svn sw --relocate Old_Path New_Path

会要求输入用户名和密码

参考:命令行重定位SVN地址

查看目录下所有状态异常的文件

在目录下使用svn status查看即可,如果只看冲突标志,使用 svn status | grep -P '^(?=.{0,6}C)'