【问题标题】:Mercurial: How to move a project/module, but keep the revision historyMercurial:如何移动项目/模块,但保留修订历史
【发布时间】:2012-01-09 02:52:08
【问题描述】:

考虑以下多模块项目(在单个存储库中):

Module A (i.e. parent)
  - Module 1 (various core stuff)
    - Module i
  - Module 2 (non-core, depends on 1)
    - Module ii
    - Module iii

(这样设置的原因是它使一些开发人员可以只处理单个模块(例如2 及其子模块),而其他开发人员可以处理整个代码库(例如A 及其孩子们)。

然后让我们假设Module ii 已被重新分类为core,并且需要移动到Module 1

我可以通过将Module iiModule 2 移动到Module 1 来处理这个问题。但是,mercurial 将此视为删除(来自2)和添加(来自1),因此我们将在移动之前丢失来自ii 的修订历史记录。 (我知道我们实际上不会“丢失”它,因为它仍然可以在 mercurial 中使用;但是,在新位置的文件中不容易访问它)。

如何移动文件并让 mercurial 使用这些文件移动修订历史记录?

【问题讨论】:

  • 这不是很清楚。这些模块是单独的回购吗?您是在问如何在保留历史记录的同时合并存储库?
  • 正如您在these questions 中看到的那样,即使先复制然后删除,仍然可以访问历史记录。这假设您的 mercurial 存储库的顶部是模块 A。
  • @PaulS - 我不明白你的问题来自哪里;他们似乎暗示了问题中没有暗示的复杂程度。为了进行多余的澄清,我已经编辑了问题以确认这一切都在一个存储库中......
  • @amaidment 在 mercurial 中,在不同的存储库中有不同的系统“模块”是很常见的。我在想这种情况一定有什么特别之处才能保证这个问题。如果这一切都在一个回购中,那么答案是hg mvhg help 会告诉你的。
  • Mercurial 确实将移动视为复制 + 删除,保留所有历史记录,这是相当微不足道的(不显示研究工作,因此为 -1)。和 SVN 一样,需要使用hg mv 进行复制(或事后标记),否则它不知道文件已移动。

标签: java mercurial move revision-history


【解决方案1】:

信息就在那里,不会丢失。您只需对 hg 日志使用 -f,--follow 标志。 (这是@freixo 在帖子Why 'hg mv' (mercurial) doesn't move a file's history by default? 中指出的)

【讨论】:

    【解决方案2】:

    你为什么不改变你的 ~/.hgrc(或 Mercurial.ini)做 xanatos 在这里所说的:Why 'hg mv' (mercurial) doesn't move a file's history by default?

    【讨论】:

      【解决方案3】:

      可以使用hg mv 将这些添加/删除对转换为“重命名”,只要它们保留在同一个存储库中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多