【问题标题】:How to merge an improperly created "branch" that isn't really a branch (wasn't created by an svn copy) into the trunk?如何将不是真正的分支(不是由 svn 副本创建)的不正确创建的“分支”合并到主干中?
【发布时间】:2011-01-30 16:47:44
【问题描述】:

我在一个团队中工作,其中有很多人对版本控制系统的概念非常不熟悉,并且只是通过反复试验来做任何看似可行的事情。有人从树干中创建了一个与树干没有祖先关系的“分支”。我的猜测是这样的:

  1. 他们在branches 中创建了一个文件夹。
  2. 他们将后备箱中的所有代码检查到桌面上的某个位置。
  3. 他们将所有代码添加到新创建的文件夹中,就好像它是一堆全新的文件一样。

所以存储库并不知道所有这些代码实际上只是主干的副本。当我查看 TortoiseSVN 中该分支的历史记录并取消选中“停止复制/重命名”框时,“复制自”下没有包含主干(或任何其他路径)的修订路径”列。

然后他们对他们的“分支”做了很多改变。与此同时,其他人正在对后备箱进行大量更改。我们试图做一个merge,当然它不起作用。因为,树干和假枝没有祖传关系。

我只能看到两种解决方法:

  1. 查看“分支”上的日志,查看所做的每个更改,然后手动将每个更改应用到主干。
  2. 查看主干上的日志,查看在修订版 540(创建“分支”时)和 HEAD 之间所做的每项更改,然后手动将每项更改应用到“分支”。

其中一种方式涉及 7 次修订,另一种方式涉及 11 次修订,因此两者都不是真正的 糟糕。但是有什么方法可以让存储库“意识到”分支确实与祖先相关,即使它创建不正确,这样我们就可以利用 Eclipse/TortoiseSVN 中的内置合并功能?

(您可能想知道:为什么您的公司雇用这些人并允许他们访问 SVN 存储库而不确保他们首先知道如何正确使用它?!我们没有 - 这是一个学校作业,是两个不同班级之间的合作——下班的那些被给予了一个非常快速的手波“概述” SVN 这并没有真正教给他们任何东西。我已经要求小组中的每个人请阅读@ 987654321@,我会确保我们(团队中经验稍微丰富的一半)密切关注存储库,以确保不会再次发生这种情况。)

【问题讨论】:

    标签: svn merge branch


    【解决方案1】:

    您必须在合并命令上使用 --ignore-ancestry。通过这个 SVN 将忽略如果文件被添加新。它只是寻找文件名

    【讨论】:

    • 奇怪的是,即使没有那个开关,只要使用命令行客户端而不是我的一个 GUI 客户端就可以工作。它合并了已更改的文件,就像我想要的那样,然后是全新的文件,我手动复制。这意味着我可能丢失了这些文件的一些历史记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多