我现在一直在使用一个可爱的mercurial repo,但最近意识到我真的应该在文件结构中创建一个更高级别的原始repo,因为那里有我想要的文件版本控制。有没有办法将Mercurial仓库“升级”到一个级别,以便它还跟踪该文件夹中包含的文件?
所以,目前的结构是:
-superFolder (not under VC)
-someFolder (not under VC)
-someFolder (repo root, under VC)
-subFolder (under VC)
我想:
-superFolder (repo root, under VC)
-someFolder (under VC)
-someFolder (under VC)
-subFolder (under VC)
我总是可以创建一个新的回购,但我想保留旧的增量......
(如果你知道如何在MacHg中使用奖励积分,但命令行也很棒)
答案 0 :(得分:3)
如果我们想象你创建了它:
#!/bin/sh
mkdir superFolder
cd superFolder
mkdir someFolder1
touch someFolder1/file
hg init someFolder2
cd someFolder2
mkdir subFolder
touch subFolder/file
hg add subFolder/file
hg commit -m subFolder
hg status -A:
C subFolder/file
我们可以像以下一样移动它:
mv ../someFolder1 . # Move the uncontrolled directory in
hg add someFolder1/ # Add uncontrolled directory
mkdir someFolder2 # Re-create *this* directory inside the root.
hg mv subFolder someFolder2 # Move sub-directory of old root to new subdirectory of root
hg commit -m 'Change repo level' # Commit
hg status -A:
C someFolder1/file
C someFolder2/subFolder/file
cd ../..
mv superFolder superFolder_old # Move old unmanaged top-level out of way
mv superFolder_old/someFolder2 superFolder # Move root to new name
rmdir superFolder_old # Remove old top-level
正如你所看到的,它需要一些重新定位。但这保留了历史,不像drharris的解决方案,它用新的id重写每个提交。这取决于你是否真的关心当前的提交ID(有没有人拥有它们?)。如果没有,他就更容易了。
答案 1 :(得分:2)
您应该使用--filemap
选项查看Convert Extension。为此,您有效地创建了一个新的存储库。请注意,这将使任何克隆无效,因此请明智地使用。
您也可以通过将现有存储库视为superFolder下的新存储库的子服务器来实现此目的。基本上,您可以在所需级别创建新的仓库,但不包括现有仓库的目录。然后,将现有仓库添加为新存储库的子目录。我从来没有试过这个,但我认为它在理论上会起作用。
答案 2 :(得分:0)
如果它没有嵌套并且您想要移动整个仓库,只需移动它(使用mv或GUI,您的选择),除非您有shell脚本或依赖于旧位置的东西,否则一切都会保持A-OK,在这种情况下,您必须更新这些以反映新位置。
如果你将它移动到一个文件夹并且根文件夹名称发生了变化,我不确定这应该如何影响遥控器,但你应该没问题。