假设人们一直在使用主干和Subversion存储库的一个分支。我想丢弃主干上的任何更改,并将其替换为分支的副本。
正如another question中所建议的,我可以移动或移除主干,然后将分支复制到主干。但随后树干的历史被分支的历史所取代。如果我想保留行李箱的历史怎么办?
我认为我想要的东西就像合并一样,但忽略了目的地的变化,只是用源替换了。我将如何在Subversion中执行此操作?这被认为是好习惯吗?
答案 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
点击右键&gt;团队分支/标记(创建标记 - 您的备份)
团队&gt;切换另一个分支/标签...选择你的分支,确保分支正确加载。
:团队&gt;断开。删除SVN信息。
团队&gt;分享项目...选择你的行李箱。
团队&gt;在你的行李箱中提交。
点击右键...选择比较...分支/标记 - &gt;寻找你的分支。如果一切正常,您将拥有:&#34;所选输入之间没有差异。&#34;
我希望它有所帮助。
答案 5 :(得分:0)
我认为您要尝试的是合并两棵树。下面我引用了tortoisesvn(https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html)的文档
“....。您要Subversion进行的操作是:”计算所需的更改,以获取[From]中继头修订版[To]中继头修订版分支,并将其更改应用于我的工作副本(树干)。 最终结果是,主干现在看起来完全像分支。”
在您的情况下,主干来自,而to是分支
我希望这会有所帮助