如何将Mercurial存储库根目录移动到一个目录中?

Sup*_*ric 8 version-control mercurial

我有一个目录结构,如:

project_root
  data/
  src/
    .hg/
    utils/
    math/
    graphics/
    ...
  README.txt
  LICENCE.txt
Run Code Online (Sandbox Code Playgroud)

从.hg /的位置可以看出,只有src /处于Hg控制之下.我想将存储库根目录从src /移动到其父目录project_root,因此我也可以跟踪data /,README.txt和LICENCE.txt.

一个hacky方法是将所有内容移动到目录而不是移动.hg:

  • 将src的内容下移到新目录src/src /
  • 将project_root(src /除外)的内容向下移动到src /
  • 将src重命名为new_project_root
  • 将new_project_root移出project_root,删除project_root

有没有更好的办法?我不能成为第一个遇到这个问题的人,而上述解决方案似乎过于复杂.

Joh*_*nck 5

你应该试试hg convert.您将把现有的Mercurial仓库"转换"为新的仓库.您可以指定转换规则,在您的情况下,原始仓库中的所有文件都将转到src新仓库中的目录.然后您可以手动将hg add其他文件复制到新的仓库.

这样做的好处是,它不会反映为历史记录中的单独更改.可能的缺点是它会导致您的变更集ID重新生成,现有的克隆将无法再从新的仓库中提取.


Joe*_*ant 4

你的计划很好。它可能看起来很复杂,但应该需要不到 20 分钟(最坏的情况)并且只发生一次。

第一步,当您移动被跟踪的文件时,您应该使用hg rename(alias hg move) 来移动它们,因为 Mercurial 会记住移动前后每个文件的内容。这将有助于将移动之前的文件更改与移动之后的新文件合并。当重命名/复制不伴随对同一变更集中的内容进行更改时效果最佳。

我建议在继续之前克隆实际的存储库(或复制整个项目目录)。