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
- 将新的项目根目录移出项目根目录,删除项目根目录
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才能看到工作目录中的更改。@无处:我倾向于先在克隆上做这种事情,然后再仔细检查,所以我高估了最坏的情况。这对所有人来说都是一个相当大的缺点,但存储库是独立的情况除外。。。