在Subversion中用分支替换trunk

时间:2009-02-25 20:02:54

标签: svn

假设人们一直在使用主干和Subversion存储库的一个分支。我想丢弃主干上的任何更改,并将其替换为分支的副本。

正如another question中所建议的,我可以移动或移除主干,然后将分支复制到主干。但随后树干的历史被分支的历史所取代。如果我想保留行李箱的历史怎么办?

我认为我想要的东西就像合并一样,但忽略了目的地的变化,只是用源替换了。我将如何在Subversion中执行此操作?这被认为是好习惯吗?

6 个答案:

答案 0 :(得分:36)

虽然这是一个非常古老的主题,但仍然分享我的经验

我们最近为其中一个项目执行了此操作,并遵循指南:

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag"

svn delete <repos/trunk> -m "deleted trunk temporarily"

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features"

按照这些步骤保持中继历史记录不变并将新功能分支替换为中继。

答案 1 :(得分:4)

合并从分支到主干的所有更改,然后使用

解决所有冲突
svn resolve path --accept theirs-full

或者,你可以告诉合并这样做:

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full

在这样的合并之后,您有一个工作副本,看起来像分支上的那个。您所要做的就是提交该主干的工作副本。

答案 2 :(得分:4)

Pre-1.5这很简单:确保你的工作副本指向trunk,然后执行“svn merge url-of-trunk url-of-branch”。你收到的变化是主干和分支之间的差异,有效地“给我一切使主干看起来像分支所需的东西。”

我不知道1.5的新合并功能是否会改变这种情况。

答案 3 :(得分:1)

我不太清楚我明白你要做什么。在创建分支后,您希望在主干上进行的所有更改发生了什么?合并后查看文件的历史记录时,是否希望它们不显示在日志中?如果是这样,那么如果你删除主干并将分支复制到它的位置就会得到的结果 - 分支在分支之前与主干共享历史记录,所以除了在分支之后进行的修订之外它是相同的。

如果你想保留trunk的历史,但只是踩踏分支和合并之间的所有变化,这是一个稍微棘手的问题。我想如果你做一个忽略祖先的合并(有一个选项--ignore-ancestry),它将用分支替换trunk的内容。您可能还想尝试使用合并--force选项(代替--ignore-ancestry并代替{{1}})。尝试几种不同的方法,看看你是否得到了你想要的结果......

如果失败,您可以始终反向合并自分支点以来的主干上的所有更改,然后在分支中合并。这似乎可能会导致一些冲突,您当然希望使用分支中的版本来解决这些冲突。我不知道这些想法是否最佳。

答案 4 :(得分:1)

trunk       remplace (trunk with your branch)
*----x      * ---->
 \          |
  \         |
   *--------|
     branch 

这个分支是从干线创建的,所以要小心不要残忍地删除干线(祖先的问题)。首先用你的主干,你的备份制作一个标签,无论如何......

我建议这样做:

使用Eclipse SVN

  1. 点击右键&gt;团队分支/标记(创建标记 - 您的备份)

  2. 团队&gt;切换另一个分支/标签...选择你的分支,确保分支正确加载。

  3. 分行中的
  4. :团队&gt;断开。删除SVN信息。

  5. 团队&gt;分享项目...选择你的行李箱。

  6. 团队&gt;在你的行李箱中提交。

  7. 点击右键...选择比较...分支/标记 - &gt;寻找你的分支。如果一切正常,您将拥有:&#34;所选输入之间没有差异。&#34;

  8. 我希望它有所帮助。

答案 5 :(得分:0)

我认为您要尝试的是合并两棵树。下面我引用了tortoisesvn(https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html)的文档

“....。您要Subversion进行的操作是:”计算所需的更改,以获取[From]中继头修订版[To]中继头修订版分支,并将其更改应用于我的工作副本(树干)。 最终结果是,主干现在看起来完全像分支。

在您的情况下,主干来自,而to是分支

我希望这会有所帮助