Version control 如何将Mercurial存储库根目录向上移动一个目录?

Version control 如何将Mercurial存储库根目录向上移动一个目录?,version-control,mercurial,Version Control,Mercurial,我的目录结构如下: project_root data/ src/ .hg/ utils/ math/ graphics/ ... README.txt LICENCE.txt 从.hg/的位置可以看到,只有src/受hg控制。我想将存储库根目录从src/向上移动到其父目录project_root,这样我就可以跟踪data/、README.txt和license.txt 要做到这一点,一种很有技巧的方法是将所有内容向下移动到一个目录中,而

我的目录结构如下:

project_root
  data/
  src/
    .hg/
    utils/
    math/
    graphics/
    ...
  README.txt
  LICENCE.txt
从.hg/的位置可以看到,只有src/受hg控制。我想将存储库根目录从src/向上移动到其父目录project_root,这样我就可以跟踪data/、README.txt和license.txt

要做到这一点,一种很有技巧的方法是将所有内容向下移动到一个目录中,而不是移动。hg up:

  • 将src的内容下移到新目录src/src/
  • 将project_root(src/)的内容下移到src/
  • 将src重命名为new_project_root
  • 将新的项目根目录移出项目根目录,删除项目根目录
有更好的办法吗?我不可能是第一个遇到这个问题的人,上面的解决方案似乎太复杂了。

你应该试试。你将把现有的Mercurial回购“转换”为新的回购。您可以指定转换规则,在您的情况下,转换规则将是原始repo中的所有文件都转到新repo中的
src
目录。然后,您可以手动复制并将其他文件添加到新的回购协议中


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

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

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


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

hg的Detect-Renames现在起了作用

复制回购协议,这样你就可以无忧无虑地把事情搞砸

以您的例子:

  • 创建src/src子目录
  • 将UTIL、数学、图形等移到src/src中
  • 然后打开提交窗口。
    • 移动的文件将显示在其旧目录中,并显示一个!在他们的新目录中有一个
  • 右键单击任何文件并选择“检测重命名…”
  • 将“最小相似性”滑块滑动到100%
  • 单击“接受所有匹配项”按钮,然后关闭“检测副本/重命名”窗口
    • 移动的文件现在应该在旧目录中显示为R,在新目录中显示为A
  • 提交此更改

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

  • 提交了附加条款

最后,现在我有了我想要的回购协议,将更改推回到最初克隆的回购协议。别忘了,你需要更新原始的repo才能看到工作目录中的更改。

@无处:我倾向于先在克隆上做这种事情,然后再仔细检查,所以我高估了最坏的情况。这对所有人来说都是一个相当大的缺点,但存储库是独立的情况除外。。。