SVN解决冲突

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SVN解决冲突

一、撤销本次修改,或者发现本次修改有问题,想撤销重头再来

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来放弃所有的本地修改

如果解决了冲突,就需要通过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来删除三个临时文件

注:如果修改时不是很明白,可以参考冲突时的三个文件

复制某一工作文件(一般用的不是很频繁)

如果只是希望取消本次的修改,你可拷贝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(用来删除三个临时文件)

运行SVNrevert撤销修改

如果冲突时决定放弃本次修改,那么可以用svn revert来撤销并进行重新修改。

$ svn revert sandwich.txt

Reverted 'sandwich.txt'

$ ls sandwich.*

sandwich.txt

当使用svn revert时不需要再用svn resolved来删除临时文件了,因为撤销会恢复所有的文件到修改前,除了已删除的文件。

相关文档
最新文档