一、撤销本次修改,或者发现本次修改有问题,想撤销重头再来
svn revert 文件名
如下:撤销增加foo这个文件
$ svn status foo
? foo
$ svn add foo
A foo
$ svn revert foo
Reverted 'foo'
$ svn status foo
? foo
注:svn revert某文件(在工作版本上修改) 与 删除某文件然后再从svn 版本库里update的操作结果是一样的。
但是使用svn revert不需要通知版本库就可以修改文件。
二、解决冲突
(1)冲突的发现
在做groovy时通常会有显示冲突的文件使得该操作不能进行;在测试机上重启时如果无法启动,可以查看webroot下的文件状态
注:在进行一次merge或者文件比较多的groovy之后最好在trunk上利用svn st查看文件状态,以发现潜在的冲突。并不是所有的 冲突都会显示在groovy之中。
另外,在进行svn up时也可发现冲突
$ svn update
U INSTALL
G README
C bar.c
Updated to revision 46.
U和G不用关心,表示本地没有修改,文件是根据版本库进行更新的;G表示本地已经修改过,与版本库没有冲突,已经进行了合并;
C表示服务器上的改动与你本地的改动有冲突,需要手工修改
(2)冲突的标志
当冲突发生了,有三件事可以帮助你注意到这种情况和解决问题:
? svn up打印C标记,并且标记这个文件已冲突。
? 如果Subversion认为这个文件是可合并的,它会置入冲突标记—特殊的横线分开冲突的“两
面”—在文件里可视化的描述重叠的部分(Subversion使用svn:mime-type属性来决定一
个文件是否可以使用上下文的,以行为基础的合并,更多信息可以看“文件内容类型”一
节。)
? 对于每一个冲突的文件,Subversion放置三个额外的未版本化文件到你的工作拷贝:
filename.mine 你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果Subversion认为这个文件不可以合
并,.mine文件不会创建,因为它和工作文件相同。)
filename.rOLDREV 这是你的做更新操作以前的BASE版本文件,就是你在上次更新之后未作更改的版本。
filename.rNEWREV 这是你的Subversion客户端从服务器刚刚收到的版本,这个文件对应版本库的HEAD版本。
这里OLDREV是你的.svn目录中的修订版本号,NEWREV是版本库中HEAD的版本号。
例:A修改了sandwich.txt,B刚刚改变了他的本地拷贝中的这个文件并且提交到服务器,Sally在提交之前更新它的工作拷贝得到了冲突:
$ svn update
C sandwich.txt
Updated to revision 2.
$ ls -1
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2
在这种情况下,Subversion不会允许你提交sandwich.txt,直到你的三个临时文件被删掉。
(3)冲突的解决
如果遇到冲突,可以选择三种方式解决:
<1>手动合并冲突文件(检查和修改文件中的冲突标志)
<2>用某一个临时文件覆盖你的工作文件
<3>运行svn revert<filename>来放弃所有的本地修改
如果解决了冲突,就需要通过svn resolved让svn知道会删除三个临时文件,svn不会认为这个文件在冲突状态了。
手工合并冲突文件
当查看了具体出冲突的文件后,可以打开该文件,找到冲突的标志。
Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread
小于和大于符号之间的就是冲突的地方,如果有能力在修改完文件并且删除冲突标志之后,进行svn resolved来删除三个临时文件
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread
小于和大于符号之间的就是冲突的地方,如果有能力在修改完文件并且删除冲突标志之后,进行svn resolved来删除三个临时文件
注:如果修改时不是很明白,可以参考冲突时的三个文件
复制某一工作文件(一般用的不是很频繁)
如果只是希望取消本次的修改,你可拷贝svn为你生成的文件替换你的工作拷贝
$ svn update
C sandwich.txt
Updated to revision 2.
$ ls sandwich.*
sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1
$ cp sandwich.txt.r2 sandwich.txt(这里r2是版本库里你此次更新前的版本文件)
$ svn resolved sandwich.txt(用来删除三个临时文件)
C sandwich.txt
Updated to revision 2.
$ ls sandwich.*
sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1
$ cp sandwich.txt.r2 sandwich.txt(这里r2是版本库里你此次更新前的版本文件)
$ svn resolved sandwich.txt(用来删除三个临时文件)
运行SVN revert撤销修改
如果冲突时决定放弃本次修改,那么可以用svn revert来撤销并进行重新修改。
$ svn revert sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt
当使用svn revert时不需要再用svn resolved来删除临时文件了,因为撤销会恢复所有的文件到修改前,除了已删除的文件。