这篇文章可能有点长,但如果您认为可以提供帮助,请阅读它,因为从字面意义上讲它可以成为救星。
这是场景。我正在开发一个[KDE]项目,其主干位于托管,让我们说:http://ubersvn.org/home/uber/trunk/myapp。另外,我正在分支机构,让我们说:http://ubersvn.org/home/uber/branches/work/myapp-mod。这就是我一直在做的事情:
创建分支后,我在我的本地工作副本上工作,我经常用来从主干中提取更改。我被告知,当最终合并回主干时,它将有助于防止大量冲突。因此,我经常这样做:
svnmerge.py merge
svn commit -F svnmerge-commit-message.txt
工作完成后,是时候将分支合并回主干了。我首先查看了主干的工作副本:
svn co svn+ssh://ubersvn.org/home/uber/trunk/myapp
cd myapp
然后,我跟着documentation进行合并:
svnmerge init svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod
来回合并:
svnmerge merge --bidirectional -S svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod
这就是问题出现的地方。 首先,从它的外观来看,它正在合并每个版本,因为我分支了。如果它这样做,我不会看到我经常从行李箱拉出来并让我的分支保持最新状态。但是,我只是假设svnmerge以某种方式使用它来解决整个合并中的冲突。到目前为止,非常好。
其次,它突然结束,发出错误,声音 ,如:
Attempt to add tree conflict that already exists
网上搜索一下,告诉我问题可以解决:
svn resolve --accept working -R .
然后它表明一些结果被清除了所有。但是,现在当我这样做时:
svnmerge merge --bidirectional -S [BRANCH_URL]
它说,“没有发现svnmerge信息”。我尝试使用svnmerge init BRANCH_URL
,但它说的是'.' has local modifications. It must be clean
。
所以,现在我遇到的问题是:
那么,我该如何从这里开始呢?一个解决方案似乎只是从分支区域扩散,应用于主干然后提交。但根据我工作的组织的政策,这是不可接受的。非常感谢任何帮助,我将非常感激。
谢谢, 罗汉
答案 0 :(得分:2)
我真的没有给你解决方案,但我希望这有帮助。
在将分支机构合并到主干之前,您的分支机构需要在您创建分支机构时从中继线每次提交。这很重要,因为否则将您的更改合并回主干将会消除其他人员对主干的更改。
rev 5: created my-branch
rev 6: change 1 in my-branch
rev 7: change somefile.h in trunk
rev 8: change 2 in my-branch
现在如果你只是将我的分支合并回主干,那么从rev 7的变化将会丢失!这就是您需要使用中继中的所有更改来更新分支的原因。无论何时合并更改,SVN都会将mergeinfo属性(SVN 1.5)添加到顶级目录(您正在进行合并的目录)。这看起来像这样:
svn:mergeinfo / trunk:7,10-13,14(这意味着您已将这些修订从trunk合并到您的分支机构)
有关树冲突的消息通常与文件和目录移动和重命名有关。如果你删除了一个文件但没有使用svn delete
,或者在trunk中更改了somefile.h但是这个文件被移动到你的分支中的其他地方。
以下是我要尝试的内容:
我无法帮助您使用命令行,因为我没有使用命令行客户端。你要做的是人们每天使用SVN做的事情,它必须工作。