在这之前需要先确保安装svn命令,然后修改svn diff为vimdiff方式:
vi ~/.diffwrap.sh
1
2
3
4
5
6
7
8
|
#!/bin/sh
# 配置你喜欢的diff程序路径
DIFF
=
"vimdiff"
# SVN diff命令会传入两个文件的参数
LEFT
=
$
{
6
}
RIGHT
=
$
{
7
}
# 拼接成diff命令所需要的命令格式
$DIFF
$LEFT
$RIGHT
|
chmod 777 ~/.diffwrap.sh
修改diff-cmd,vi ~/.subversion/config
1
|
diff
-
cmd
=
/
Users
/
sh7ne
/
.diffwrap
.sh
|
这里的路径以具体情况而定。
1.首先是checkout一个版本库
svn checkout 版本库(如 svn checkout http://svn.sh7ne.com/res)
2.日常开发修改一个文件前,先更新下目录
svn update
如果提示文件锁定之类的使用svn cleanup,如果还是提示锁定,则切换到上级目录使用该命令
3.修改一个文件,提交前查看下都有哪些文件被修改了
svn st
4.提交前确认下是否是自己想提交的修改,比较文件修改前后内容
svn diff [filename] 如果不带文件名filename,则查看本次修改的所有的文件
5.如果有新增的文件或则目录,需要先新增
svn add * –force
6.提交修改
svn ci -m ‘修改log’ [filename],带filename则提交filename,不然 提交当前目录所有的修改
7.查看文件修改记录
svn blame filename,查看每行都是谁修改过
8.查看文件(夹)修改记录
svn log -v -l n [filename],带file则是具体的文件filename的n条修改记录具体信息,这里有个坑,就是你要看最近的n条,一定要先执行svn update,然后再执行svn log就可以了(如 svn update && svn log -v -l 3 查看当前目录最新的3条svn提交记录)
9.比较历史文件修改内容
a.svn diff -c 版本号 filename(通过svn log获得)
b.svn diff -r版本号1:版本号2 filename
10.获取历史文件内容
svn cat -r 版本号 filename
11.下载文件历史版本(如果是文本文件,建议直接获取内容svn cat就好,这个是我用来下载其他类型的文件的办法,可能有更好的办法,望回复补充)
svn copy -r 版本号 filename tmpFilename
这里会新增一个分支,所以用完这个文件后,先删掉,然后
svn revert tmpFilename
即可正常提交,不然会出现tmpFile is scheduled for addition, but is missing的错误
使用中问题解决
Skipped ‘文件夹xx’ — node remains in conflict
解决办法 svn revert –recursive 文件夹xx #递归恢复一整个目录的文件夹xx
一些使用中的技巧总结:
1.代码回滚
平常开发中你上线了个版本(如123)然后出bug了要回滚,不需要挨着每个文件去查看之前的内容,只需要使用在他们共有的顶层目录使用命令:
1
2
3
|
svn
merge
-
r
上线的版本号
:
(上线的版本号
-
1
)
.
不要漏掉
.
(当前目录
),如
:
svn
merge
-
r
123
:
122
.
|
听到这里你是不是已经去测试了吧,然后当然你的代码是正确的,所以测试了还是要恢复回去,那忽略这次操作就好了:
1
|
svn
revert
-
R
.
|
同样不要漏掉了 . (当前目录),这样就不用挨着每个文件删了然后update了。