版本控制——如何将Mercurial存储库根目录移动到一个目录



我有一个目录结构:

project_root
  data/
  src/
    .hg/
    utils/
    math/
    graphics/
    ...
  README.txt
  LICENCE.txt

从. Hg/的位置可以看出,只有src/在Hg控制之下。我想把存储库根从src/移动到它的父目录project_root,这样我就可以跟踪data/、README.txt和license .txt。

一种简单的方法是将所有内容向下移动,而不是向上移动。hg:

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

有更好的方法吗?我不是第一个有这个问题的人,上面的解决方案似乎太复杂了。

您应该试试hg convert。您将"转换"现有的Mercurial回购到一个新的。您可以为转换指定规则,在您的示例中,将原始repo中的所有文件转到新repo中的src目录。然后你可以手动复制和hg add其他文件到新的repo。

这样做的好处是它不会在历史记录中作为单独的更改反映出来。可能的缺点是,它将导致您的更改集id重新生成,并且现有的克隆将不再能够从新的repo中提取。

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

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

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

hg的"检测重命名"功能现在很受欢迎。

克隆这个仓库,这样你就可以把事情搞砸而不用担心。

使用你的例子:

    创建src/src子目录
  • 移动utils,数学,图形等到src/src
  • 然后打开提交窗口。
    • 移动的文件将出现在旧目录中,并带有!并在新目录中添加?
  • 右键单击任何文件,选择"检测重命名…"
  • 将最小相似度滑块滑动到100%
  • 点击接受所有匹配按钮,关闭检测副本/重命名窗口
    • 移动的文件现在应该在旧目录中显示R,在新目录
    • 中显示A
  • 提交更改

  • 然后我移动数据,Readme.txt等下到src(不是src/src)

  • 提交添加。

最后,现在我有了我想要的repo,将更改推回到最初克隆的repo。不要忘记,你需要更新原始的repo来查看工作目录中的更改。

最新更新