linux下常用的svn命令总结如下:
1.将文件检出到本地目录(svn checkout)
svn checkout SVN服务器仓库的目录 [本地目录] --username 用户名
例如:
svn checkout https://PC-IZAR:8443/svn/test/ /home/test --username izar
注意:
- 本地目录不写的话会checkout到当前目录
- username前是两个连续的横线- -
- 用户名是你在SVN仓库中添加的用户
2.添加新文件(svn add)
svn add 文件名
例如:
svn add test.c
注意:
这里添加新文件并没有添加到svn repository,svn commit才是提交到svn仓库中
批量添加
svn status|grep ? |awk '{print $2}'|xargs svn add
还有就是命令svn add *会忽略所有已经在版本控制之下的目录
svn add *
有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下:
svn add * --force
3.提交(svn commit)
svn commit -m "版本更改注释/提交注释"
例如:
svn commit -m "修改了testfun函数"
4.批量删除(svn delete)
svn status|grep ! |awk '{print $2}'|xargs svn del
5.svn版本库修改URL路径
windows TortoiseSVN客户端
在工作复本的根目录上右键->TortoiseSVN->重新定为(Relocate),然后修改URLLinux客户端
svn sw --relocate svn://old_ip/目录 svn://new_ip目录
6.查看版本日志(svn log)
svn log 显示所有的svn版本日志
svn log -l2 显示最近2个版本的svn日志
svn log -v 显示所有的svn版本日志,并附有每个版本的改动内容
svn log -l2 -v 显示最近2个版本的svn日志,并附有每个版本的改动内容
svn log -r versionX:versionY 显示指定版本X到Y之间的,所有版本svn日志
7.版本比较(svn diff)
svn diff -r versionX:versionY 比较版本X和Y之间的不同
8.版本更新(svn up)
svn up
时可能出现以下选项:
(p) postpone 暂时推后处理,我可能要和那个和我冲突的家伙商量一番
(df) diff-full 把所有的修改列出来,比比看
(e) edit 直接编辑冲突的文件
(mc) mine-conflict 如果你很有自信可以只用你的修改,把别人的修改干掉
(tc) theirs-conflict 底气不足,还是用别人修改的吧
(s) show all options 显示其他可用的命令
9.版本回退
有两种方法:svn up
或 svn merge
svn up -r serversionX 更新到版本X
注意:使用svn up -r X
回退到指定版本X时,回退完不能再svn up
,因为此时svn up
会由更新到最新版本了。
第一种情况:改动没有被提交(commit)。
这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
svn revert [-R] something
其中something可以是(目录或文件的)相对路径也可以是绝对路径。
当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。
第二种情况:改动已经被提交(commit)。
这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设最新版本号是28。
2、然后找出要回滚的确切版本号:
svn log [something]
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
3、回滚到版本号25:
svn merge -r 28:25 something
为了保险起见,再次确认回滚的结果:
svn diff [something]
发现正确无误,提交。
4、提交回滚:
svn commit -m “Revert revision from r28 to r25,because of …”
提交后版本变成了29。
将以上操作总结为三条如下:
1. svn update,svn log,找到最新版本(latest revision)
2. 找到自己想要回滚的版本号(rollbak revision)
3. 用svn merge来回滚: svn merge -r : something
10.日志变更
在linux下:
$svn propedit -r N --revprop svn:log URL
$svn propset -r N --revprop svn:log "new log message" URL
其中N是版本号,URL是代码仓库的路径,URL已经被电脑记录时,URL可略。
注意:如果遇到错误提示信息
DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent
或
Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
解决办法:
windows 下的VisualSVN Server作为SVN的服务器。打开VisualSVN Server的管理界面,选择版本库,右击->properties->Hooks ->Pre revision property change hook,如图:
点击Edit,输入下面的内容,然后保存
SET REPOS="%1"
SET REV="%2"
SET USER="%3"
SET PROPNAME="%4"
SET ACTION="%5"
IF %ACTION% == "M" (IF %PROPNAME% == "svn:log" (EXIT 0))
ECHO "Changing revision properties %PROPNAME% is prohibited" >&2
EXIT 1
如图:
点击ok,然后就可以修改已经提交的log内容了!
如果在windows下,使用TortoiseSVN客户端,选中代码目录,右键点击show log
,然后在列出的日志中,选择要修改的那个版本右键选择Edit log message
。