svnmerge真的有帮助吗?

时间:2010-09-18 09:20:12

标签: svn version-control

这篇文章可能有点长,但如果您认为可以提供帮助,请阅读它,因为从字面意义上讲它可以成为救星。

这是场景。我正在开发一个[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

所以,现在我遇到的问题是:

      
  • 由于有本地修改,我无法从我的分支中拉出来
  •   
  • 为了让我的工作副本干净,我必须提交,这不是一个选项,因为合并只是中途,它肯定会破坏主干。
  •   
  • 我的文件完全不一致。我不知道修改是如何合并的,有些文件包含'mylittleapp.h',但是'mylittleapp.h'是在以后的版本中创建的。
  •   
  • **我的分支中添加了**每个**新文件,存在大量冲突**。我**绝对**不明白这一点。我是唯一一个处理这些文件的开发人员,这些文件在任何时候都无法在主干中运行。为什么这些文件中存在这么多冲突?
  •   
  • 有大量名为`mybigapp.h.merge-(right | left).r [0-9] +`和`mybigapp.h.working`的文件。 `mybigapp.h`本身充满了冲突。如此多的冲突,人类无法解决。
  •   
  • 由于一半的文件假设存在一个实际上不存在的文件,我不能测试或做任何事情,直到我得到文件。在“尝试添加树冲突”错误后,我无法获得任何后续修订。

那么,我该如何从这里开始呢?一个解决方案似乎只是从分支区域扩散,应用于主干然后提交。但根据我工作的组织的政策,这是不可接受的。非常感谢任何帮助,我将非常感激。

谢谢,   罗汉

1 个答案:

答案 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但是这个文件被移动到你的分支中的其他地方。

以下是我要尝试的内容:

  1. 结帐新主干
  2. 结帐新分行
  3. 确保分支包含来自主干的每个更改(如果您使用的是svn 1.5,则可以检查顶级分支目录上的mergeinfo属性)
  4. 阅读有关合并http://svnbook.red-bean.com/en/1.5/index.html的所有信息(这不会花太长时间,你会确切地知道你在做什么)
  5. 尝试将您的分支合并回主干
  6. 我无法帮助您使用命令行,因为我没有使用命令行客户端。你要做的是人们每天使用SVN做的事情,它必须工作。