svn命令行使用技巧

1.撤销全部操作

如果你希望恢复一整个目录的文件,可以使用--depth=infinity选项:

$ Svn revert --depth=infinity .
Reverted newdir/afile
Reverted foo.c
Reverted bar.txt
最后,你可以取消预定的操作:
$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c
$ Svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
$ svn status
?      mistake.txt

?      whoops。SVN的子命令Svn revert的一些相关问题就介绍到这里,请你关注本节的其他文章介绍。

2.删除svn信息

删除这些目录是很简单的,命令如下 
find . -type d -name ".svn"|xargs rm -rf 


3.退回到某一版本

一直在找svn回滚的方法,这个还是很实用的,屡试不爽阿

经常由于坑爹的需求,功能要切回到之前的某一个版本。有两种方法可以实现:
方法1: 用svn merge
  1) 先 svn up,保证更新到最新的版本,如20;
  2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 。如果想要更详细的了解情况,可以使用svn diff -r 10:20 [文件或目录];
  3) 回滚到版本号10:svn merge -r 20:10 [文件或目录],注意版本号之间的顺序,这个叫反向合并;
  4) 查看当前工作版本中的文件,如test.cpp和版本号10中文件的差别:svn diff -r 10 test.cpp, 有差别则手动改之;
  5) 若无差别,则提交:svn ci -m“back to r 10,xxxxx” [文件或目录]。这时svn库中会生成新的版本,如21。
方法2: 用svn up
  前2步如方法1,然后直接 svn up -r 10。当前的工作版本就是版本10了。但是注意,这时svn库中会并不会生成新的版本,下次在本地svn up之后,还是会回到之前的版本。

4.SVN如何查看修改的文件记录

主要是有四个命令,svn log用来展示svn 的版本作者、日期、路径等等;svn diff,用来显示特定修改的行级详细信息;svn cat,取得在特定版本的某文件显示在当前屏幕;svn  list,显示一个目录或某一版本存在的文件。

比较常用的是svn diff命令。它可以比较不同版本之间、svn版本和本地版本库之间,以及检查本地修改的作用。

svn diff; #什么都不加,会坚持本地代码和缓存在本地.svn目录下的信息的不同;

svn diff -r 3;  #比较你的本地代码和版本号为3的所有文件的不同;

svn diff -r 3 text.c;  #比较你的本地代码和版本号为3的text.c文件的不同;

svn diff -r 5:6;  #比较版本5和版本6之间所有文件的不同;

svn diff -r 5:6 text.c;  #比较版本5和版本6之间的text.c文件的变化。

查看修改的信息使用 log 指令,如下:

svn log;  #什么都不加会显示所有版本commit的日志信息;

svn log -r 4:5;  #只看版本4和版本5的日志信息;

svn log test.c;  #查看文件test.c的日志修改信息;

svn log -v dir;  #查看目录的日志修改信息,需要加v;

查看某个版本的某个文件内容,使用cat指令,如下:

svn cat -r 4 test.c;  #查看版本4中的文件test.c的内容,不进行比较;

不用下载到本地查看文件的各种信息,使用 list 指令,如下:

svn list http://svn.test.com/svn  #查看目录中的文件;

svn list -v http://svn.test.com/svn  #查看详细的目录的信息(修订人,版本号,文件大小等);


5.checkout出单个文件

1、检出目录images

svn co --depth=empty http://www.iusesvn.com/project1/images images_work_dir 

这样就在本地形成了一个工作拷贝目录images_work_dir

2、进入images_work_dir目录,单独更新logo.jpg

svn up logo.jpg 

这样,我们就单独检出了logo.jpg,后面就可以对这个文件进行修改、提交等操作。


6.关于冲突解决

如果不小心提交了一些动态改变根本不需要的文件到svn服务器上,出现冲突如何解决?
基本思路是首先使用svn resolved filename 放弃对文件的修改,然后就可以提交上去了。
然后svn rm test.log删除掉这个文件。然后再次提交,如果其他人更新的也同样处理。 

1.svn ci -m "update" 
svn: Commit failed (details follow): 
svn: Aborting commit: 'test.log' remains in conflict 

2.使用svn resolved test.log (该命令会删除冲突的mine等文件,告诉svn冲突已解决,对test.log文件没影响)

3.svn ci -m "update" 
这个时候应该可以提交了 

4.svn rm test.log 
删除掉这个文件 

5.svn ci -m "update" 
再次提交 

这个时候服务器上就没有这个文件了。 
在其他的服务器终端上如果遇到这个问题的时候重复这个操作。

工程师A修改了a.txt的第一行,提交了。
工程师B也修改了a.txt的第一行,然后执行svn up,这时SVN提示了:(以下,你开始扮演工程师B的角色了)
$ svn up
在 “a.txt” 中发现冲突。
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:

我一般选择p(推迟),即引入冲突到本地,不过不会影响到SVN服务器端,可以放心。

OK,开始解决冲突了。

这时,会生成几个文件:

a.txt  a.txt.mine  a.txt.r6328  a.txt.r6336

其中a.txt中包含了工程师A、B的所有修改,以<<<<<<<、=======、>>>>>>>分隔。

a.txt.mine是工程师B的修改,也就是未update前的a.txt。

a.txt.r6328 是工程师A提交前的版本,即未导致冲突的版本。

a.txt.r6336是工程师A提交后的版本,即导致冲突的版本。

一般,查看a.txt就可以看到冲突的详情了:

[yicheng@chengyi svntest]$ cat a.txt

<<<<<<< .mine

i also modify ,agndagnagasdg;

=======

i modify this line;

>>>>>>> .r6336

以上,<<<<<<< .mine和=======之间是工程师B(当前的“你”)修改的内容,=======与>>>>>>> .r6336之间是工程师A修改的内容。这时,最好的办法是,叫上工程师A,你们一起确定这些修改是否都需要,是否相互兼容,然后留下需要的部分,删 除<<<<<<< .mine、=======和>>>>>>> .r6336。

然后,测试,测试!确定没问题之后,就可以告诉SVN,你解决冲突了:

svn resolve –accept working a.txt (该命令会删除a.txt.mine  a.txt.r6328  a.txt.r6336)

svn ci -m ’some comment’ a.txt

这里需要注意的是,a.txt.mine  a.txt.r6328  a.txt.r6336这几个文件的存在代表着有冲突产生。如果不解决冲突,就手工删除它们,SVN服务器也会很傻的认为你解决了冲突,允许你继续之后 的工作。但是,冲突依旧存在,你的a.txt中不但有别人的修改,还有那些讨厌的<=>符号。

在冲突未解决前,试图提交代码是肯定会失败的:

$ svn ci -m ”

svn: 提交失败(细节如下):

svn: 提交终止: “/path/to/svntest/a.txt” 处于冲突状态

在使用svn update 的时候,会出现如下一些信息:
$ svn update
U  INSTALL
G  README
C  bar.c
Updated to revision 46.

那么,U 开头的信息提示你,这个文件在你本地没有修改过,文件已经根据版本库的新版本更新了。G 开头的信息提示你,这个文件在你本地已经修改过,但是和版本库中对应的版本并没有冲突的地方,svn已经合并更新了。而C 开头的信息提示你,这个文件有点麻烦,你在本地的修改和版本库中的版本修改的地方重叠了,也就是说,你修改了某一行,你的同事也修改了同一行。这个就需要你自己手工去解决了。当冲突发生时,要注意到有三件事情可以帮助你解决问题。













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值