如何使用SVN将repo文件夹中的更改合并到自身?

时间:2009-08-20 14:18:45

标签: svn merge branch

我在我的subversion存储库中的一个分支上做了很多开发。在整个过程中,我通过手动跟踪我输入的内容来合并主干更改。我不小心读了一本SVN 1.0书,它明确告诉我SVN没有跟踪哪些更改已被合并,所以我试图指定哪些更改为合并到我的分支,以使其与主干和正在进行的所有开发保持同步。

问题在于:同步时我错过了很多变化。我将它同步到我几天前想到的最新状态,然后将它重新放回到我标记的行李箱中并删除当前的行李箱,然后将我的分支复制到行李箱中。然而,在主干上完成的一些开发(事实上相当多)已经丢失,因为我没有在将我的分支移动到主干之前应用这些更改并且没有svn合并--reintegrate(其中)会将我的更改应用到主干上)。从那以后开始在这个新的主干上进行开发(整个错误修正),所以我无法真正重做合并。

重要提示:我实际上使用的是SVN 1.5,它使用svn:mergeinfo属性。这很好,因为我确切地知道我错过了哪些修改,但是我无法让SVN应用它们。我尝试在我的工作副本(检查主干)上执行此操作:

svn merge http://example.org/svn/trunk

无济于事,这也是:

svn merge --ignore-ancestry http://example.org/svn/trunk

似乎适用了太多的变化,我认为它适用于所有变更集,而不仅仅是我更新分支时遗漏的变更集。

请帮忙!

2 个答案:

答案 0 :(得分:1)

您可以使用svn指定修订范围merge。因此,您可以指定您错过的每个修订版,以获得每次所做的更改。

例如。

svn merge -r 30:31 thhgttg.txt 

在您更新了所有修订版之后,我会编辑mergeinfo属性,以便它包含完整的修订版本。

答案 1 :(得分:1)

  

我标记并删除了当前的内容   trunk,然后将我的分支复制到   树干

永远不要那样做。 URL http://example.org/svn/trunk现在根据您正在讨论的修订引用不同的版本化对象:旧主干或新主干。要区分两者,您可以使用peg revision这样:

svn merge http://example.org/svn/trunk@X

如果peg版本X是您删除trunk之前的修订版(例如,删除了trunk的修订版减去1),那么这将合并来自旧trunk的所有符合条件的修订版。

您可以使用--dry-run选项查看在没有实际操作的情况下会发生什么。您可以使用-r-c指定要合并的特定修订版或范围,如键入svn help merge时所述。<​​/ p>