Subversion树冲突

树冲突场景

  • 同一条分支,有2个Dev在同时编辑一个文件,两人没沟通好:
  1. 其中一Dev A把一个文件移到另外一个目录或者重命名了,并且已经提交;
  2. 另一Dev B也同时在修改这个文件内容,并不知道A已经将该文件转移或重命名;
  3. 冲突出现:当Dev B想提交代码到分支时,会出现不让提交情况。

场景实例

  • 初始分支:
 xfc 写道
$ svn list -Rv http://xxx.com/branches/boringkiller

61536fangchen2月1319:32htdocs/

61536fangchen592月1319:32htdocs/changeLog.txt

  •  Dev A的改动,且提交:
xfc 写道
$ svn st

Ahtdocs/changlog.txt

D htdocs/changeLog.txt
  •  Dev B的改动:
xfc 写道
$ svn stM htdocs/changeLog.txt
  •  此时Dev B想提交代码,报错:
xfc 写道
$ svn ci -m"xfc ci"

Sendinghtdocs/changeLog.txt

svn:E155011:Commitfailed(detailsfollow):

svn:E155011:File'/home/xfc/works/myDemo/htdocs/changeLog.txt'isoutofdate

svn: E160013: File not found: transaction '61545-1cqn', path '/misc/avatar/branches/boringkiller/htdocs/changeLog.txt'
  •  svn up后:
xfc 写道
$ svn up

Updating'.':

Chtdocs/changeLog.txt

Ahtdocs/changlog.txt

Atrevision61545.

Summaryofconflicts:

Tree conflicts: 1

解决办法

  • 一方案(以Dev A的版本为准,把Dev B自己的改动合并到Dev A的改动上)

第一步

 写道
$ svn diff htdocs/changeLog.txt

Index:htdocs/changeLog.txt

===================================================================

---htdocs/changeLog.txt(workingcopy)

+++htdocs/changeLog.txt(workingcopy)

@@-2,3+2,5@@

@Authorxfc

TreeConflictDemo.

+

+I'm editing this file.

第二步

 写道
$ svn diff htdocs/changeLog.txt > replace

第三步,编辑replace文件,替换 “changeLog.txt”为“changelog.txt”

第四步

xfc 写道
$ svn patch replace     U htdocs/changlog.txt

现在的状态:

 写道
$ svn st

Mhtdocs/changlog.txt

A+Chtdocs/changeLog.txt

>localedit,incomingdeleteuponupdate

Summaryofconflicts:

Treeconflicts:1

第五步,删除冲突文件

xfc 写道
svn del --force htdocs/changeLog.txt     D htdocs/changeLog.txt

 最后:

 写道
$ svn st    M htdocs/changlog.txt

二方案(以Dev B的版本为准,把Dev A对文件的重命名无效)

第一步,删除A的改动:

xfc 写道
$ svn del --force htdocs/changlog.txt    D htdocs/changlog.txt

 第二步,接受本地working的改动

xfc 写道
svn resolve --accept=working htdocs/changeLog.txt    Resolved conflicted state of 'htdocs/changeLog.txt'

 看本地改动是否生效:

xfc 写道
svn diff

Index:htdocs/changlog.txt

===================================================================

---htdocs/changlog.txt(revision61559)

+++htdocs/changlog.txt(workingcopy)

@@-1,5+0,0@@

-BoringKillerChangeLog:

-@Authorxfc

-

-TreeConflictDemo.

-

Index:htdocs/changeLog.txt

===================================================================

---htdocs/changeLog.txt(workingcopy)

+++htdocs/changeLog.txt(workingcopy)

@@-3,3+3,4@@

TreeConflictDemo.

+I'm editing my file.

 完毕,ci了~

参考资料

  总结:

    使用到的svn一些没接触过的命令

  • svn patch 
  • svn del --force filepath
  • svn resolve --accept=working filepath

相关推荐