SVN 命令速查

SVN常用命令速查表

下载代码

1
2
svn checkout svn://192.168.1.1/pro/domain
svn co path // 简写

更新代码

1
2
svn update // 将当前目录以及子目录下的所有文件都更新到最新版本
svn update -r 200 test.java // 将test.java更新到版本200

本地代码回退

修改过的东西没有递交,这种情况下revert会取消之前的修改。

1
svn revert test.java

如果是将路径path下面所有的代码取消修改,需要加上 -R 参数

1
2
svn revert -R path
svn revert // 回退当前目录下的所有文件

线上代码回退

如果改动的东西已经提交了,这个时候需要使用merge来处理
步骤如下:

1
2
3
4
5
6
svn update // 确认代码最新
svn log test.java
svn log path // 通过log命令获取版本号
svn merge -r 20:10 test.java
svn merge -r 20:10 path // 合并修改到本地文件
svn ci -m "rollback code" // 提交修改合并上传到线上

解决冲突

冲突发生时一般会有如下提示信息:

1
2
3
4
Conflict discovered in file 'app\app.iml'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
(mc) my side of conflict, (tc) their side of conflict,
(s) show all options:

相关的解释如下:

1
2
3
4
5
6
(p) postpone 暂时推后处理,我可能要和那个和我冲突的家伙商量一番
(df) diff-full 把所有的修改列出来,比比看
(e) edit 直接编辑冲突的文件
(mc) mine-conflict 如果你很有自信可以只用你的修改,把别人的修改干掉
(tc) theirs-conflict 底气不足,还是用别人修改的吧
(s) show all options 显示其他可用的命令

移除冲突

当执行

1
2
3
svn update
C test.java
Updated to revision 31.

此时工作区会产生三个新文件:

1
2
3
4
5
ls
test.java
test.java.mine
test.java.r30
test.java.r31

当解决了test.java的冲突,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。
然后再 commit。

当然也可以仅仅删除冲突的文件并且提交,但是 svn resolved 除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,推荐你使用这个命令。

提交代码

1
2
svn add test.java // 往版本库中添加文件
svn commit -m "add test file to svn" test.java // 提交修改

加锁/解锁

1
2
3
svn lock -m "lock test file" test.java
svn unlock test.java
svn unlock path

查看文件目录状态

1
2
svn status // 查看当前目录下文件及子目录的状态,正常状态不显示
svn status path // 查看path目录下文件及子目录的状态,正常状态不显示

相关图标解释如下

1
2
3
4
5
?:不在svn的控制中;
M:内容被修改;
C:发生冲突;
A:预定加入到版本库;
K:被锁定

加参数v后,显示版本号、修改人及文件路径

1
2
3
4
5
svn status -v path // 显示文件和子目录状态(显示所有文件状态)
6514 6506 jingtalk .
6514 6481 jingtalk androidTest
6514 6481 jingtalk androidTest\java
6514 6481 jingtalk androidTest\java\com

查找某类修改的情况,比如只查找修改的gradle文件,加上参数 “| grep gradle”

1
2
3
4
5
svn status | grep gradle
M Login\facebooklogin\build.gradle
? Samples\IMSDKSample\.gradle
M Samples\IMSDKSample\build.gradle
M Samples\IMSDKSample\gradle.properties

删除文件

1
2
3
4
5
6
7
8
svn delete svn://192.168.1.1/pro/domain/test.java -m "delete test file" // 删除svn文件
// 或者
svn delete test.java
svn ci -m "delete test file"
svn del
svn rm
svn remove

查看日志

显示这个文件或者目录的所有修改记录,及其版本号的变化

1
2
svn log path
svn log test.java

显示svn最近的5条日志,这个很有用

1
2
svn log --limit 5
svn log -l 5

查看文件详细信息

显示这个文件或者目录的SVN地址、本地信息、版本、最近修改人及修改记录

1
2
svn info path
svn info test.java

比较差异

  • 对比本地版本与线上版本
1
2
svn diff path
svn diff test.java

如下,通过+/-号来区分修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ svn diff build.gradle
Index: build.gradle
===================================================================
--- build.gradle (revision 6514)
+++ build.gradle (working copy)
@@ -50,7 +50,7 @@
leakCanaryVersion = '1.3.1'
// Third Channel Libraries
- facebookVersion = '4.6.0'
+ facebookVersion = '4.20.0'
googleVersion = '8.1.0'
adjustVersion = "4.11.0"

  • 对比两个版本之前的区别
1
svn diff -r 200:201 test.java

合并差异

将两个版本之间的差异合并到当前文件

1
svn merge -r 200:205 test.java

SVN 帮助

1
2
svn help
svn help commit

SVN list

查看path路径下所有属于版本库的文件

1
2
3
4
5
6
7
8
9
10
11
12
svn list path
svn ls
// 显示当前base目录子目录的svn情况
svn ls base
.gitignore
base.iml
build.gradle
jni/
libs/
proguard-rules.pro
src/

引用

SVN命令行模式的操作命令教程(各种SVN命令)