描述:
svn resolved — 删除工作拷贝文件或目录的“冲突”状态。
删除工作拷贝文件或目录的“conflicted”状态。这个程序不是语义上的改变冲突标志,它只是删除冲突相关的人造文件,从而重新允许路径提交;也就是说,它告诉Subversion冲突已经“解决了”。关于解决冲突更深入的考虑可以查看“解决冲突(合并别人的修改)”一节。
用法:
svn resolved PATH... svn resolved: 移除工作副本的目录或文件的“冲突”状态。 用法: resolved PATH… 注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的 相关文件,然后让 PATH 可以再次提交
例子:
1、如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件
$ svn update C rocschool.php Updated to revision 31. $ ls rocschool.php rocschool.php.mine rocschool.php.r30 rocschool.php.r31
当你解决了rocschool.php的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。
你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。
2、使用如下命令解决冲突
svn resolve index.html
3、手工编辑修复,而不是命令解决冲突,需要执行如下命令通知SVN服务
svn resolved index.html
注意一个是加了字母d,表示已解决(完成时)
4、文件被删除了, 不再需要了
这种情况就很好处理, 使用相关SVN命令将其删了就可以了.
4.1、服务端modified, 本地missing, 该文件不要了. 这种情况本地不会存在该文件, 直接调用resolve就可以了.
#标记冲突已解决(使用本地的状态, 本地该文件的状态是Delete, 提交后服务端对应的文件就会被删除) svn resolve --accept=working file_old.php
4.2、本地modified, 服务端missing, 该文件不要了. 这种情况本地存在改文件, 所以强制删掉本地的, 再调用resolve
#强制删除本地的文件(发生的文件不加--force是删不掉的) svn delete --force file_old.php #标记冲突已解决(使用服务器状态) svn resolve --accept=theirs-conflict file_old.php #或者使用本地状态也可以, 应该本地的状态跟服务一致了(都是Delete) svn resolve --accept=working file_old.php
5、文件被删除了, 但是还需要
这种情况可能是由于文件被不小心删除了, 重新加回svn就可以了.
5.1、服务端modified, 本地missing, 选择their conflict就可以了
svn resolve --accept=theirs-conflict file.php
5.2、本地modified, 服务端missing
svn resolve --accept=working file.php
6、文件被移走或重命名了
这种情况的具体场景是A端修改了某文件, B端移动或重命名(简称改路径)了该文件. 这种情况需要分两步处理, 分别是文件内容冲突处理和目录结构冲突处理.
为了方便描述, 我们把A端修改的文件成为旧文件, B端改路径的文件称为新文件. 我们最终要的是新文件还是旧文件, 在处理时只有细微的区别, 所以我们这里假定我们要的时新文件.
由于B端改路径之后还可能又做了修改, 下面我们就有无修改分成两种情况来处理.
6.1、文件改路径后无修改. 这个情况很好处理, 只要把A端的修改重做一遍就可以, 具体做法是, 将A端的修改做成一个补丁, 再将补丁应用于新文件上。
假设本地是A端(修改了文件--bar.c), 服务端是B端(转移了文件->baz.c). 内容处理:
svn diff bar.c > PATCHFILE #创建补丁文件 vi PATCHFILE #编辑补丁文件 ... ---bar.c (working copy) #将这行的bar.c改成baz.c +++bar.c (working copy) #将这行的bar.c也改成baz.c ... svn patch PATCHFILE . #应用补丁到当前目录(补丁只能应用到目录)
结构处理:
svn delete --force bar.c #将已经missing的文件状态改为D svn resolve --accept=working bar.c #标记已解决(此处也可用theirs-conflict)
假如服务端是A端修改了文件, 本地是B端转移了文件, 创建补丁的方法有细微的区别 内容处理:
svn info bar.c #先使用svn info查看详情 Tree conflict: local file moved away, incoming file edit upon update Source left: (file) bar.c@1485 Source right: (file) bar.c@1486 svn diff -r1485:1486 bar.c > PATCHFILE #根据详情创建补丁文件 vi PATCHFILE #编辑补丁文件 ... ---bar.c (working copy) #将这行的bar.c改成baz.c +++bar.c (working copy) #将这行的bar.c也改成baz.c ... svn patch PATCHFILE . #应用补丁到当前目录(补丁只能应用到目录)
结构处理:
svn resolve --accept=working bar.c #标记已解决
6.2、文件改路径后有修改. 这种情况目录结构冲突处理跟上面类似, 这里就不再累述了, 但是的文件内容冲突处理比较麻烦, 目前还没有找到自动合并的方法, 需要手动合并, 这里只能是给点建议, 建议是先用svn diff 查看就旧文件的改动作为索引:
svn info bar.c #找到旧文件变化的版本 Tree conflict: local file moved away, incoming file edit upon update Source left: (file) bar.c@1485 Source right: (file) bar.c@1486 svn diff -r1485:1486 bar.c #查看变化的内容 Index: bar.c =================================================================== --- bar.c (revision 1485) +++ bar.c (revision 1486) @@ -3,4 +3,5 @@ void main() { printf("hello") +printf("world") }
之后, 在用图形界面工具(如beyond compare)比对旧文件与新文件, 将svn diff里的变更点一个一个手动应用到新文件。