我的目录结构如下:
project_root
data/
src/
.hg/
utils/
math/
graphics/
...
README.txt
LICENCE.txt
从.hg /的位置可以看出,只有src /处于Hg控制之下。我想将存储库根目录从src /移动到其父目录project_root,因此我也可以跟踪data /,README.txt和LICENCE.txt。
执行此操作的一种愚蠢方法是将所有内容移到目录中而不是移动.hg:
有更好的方法吗?我不能成为第一个遇到这个问题的人,而上述解决方案似乎过于复杂。
答案 0 :(得分:5)
您应该尝试hg convert
。您将把现有的Mercurial仓库“转换”为新的仓库。您可以指定转换规则,在您的情况下,原始仓库中的所有文件都将转到新仓库中的src
目录。然后,您可以手动将其他文件hg add
复制到新的仓库。
这样做的好处是它不会在历史记录中反映为单独的更改。可能的缺点是它会导致您的变更集ID重新生成,现有的克隆将无法再从新的仓库中提取。
答案 1 :(得分:4)
你的计划没问题。它似乎涉及,但它应该不到20分钟(最坏的情况),只发生一次。
在移动被跟踪文件的第一步中,您应该使用hg rename
(别名hg move
)来移动它们,因为Mercurial会记住每个文件在移动之前和之后的内容。这将有助于在移动之前将文件上的更改与移动后的新文件合并。在重命名/复制时,如果没有更改同一变更集中的内容,则效果最佳。
我建议在继续之前克隆实际的仓库(或复制整个项目目录)。
答案 2 :(得分:0)
hg的Detect Renames现在是一种享受。
克隆回购邮件,这样你就可以毫不费力地搞砸了。
使用您的示例:
提交此更改
然后我将数据Readme.txt等移到src(而不是src / src)
最后,现在我已经拥有了我想要的仓库,将更改推回到最初克隆的仓库。不要忘记您需要更新原始仓库以查看工作目录中的更改。