有没有办法将Mercurial repo的范围移到一个文件夹中?

时间:2011-03-26 05:10:30

标签: version-control mercurial

我现在一直在使用一个可爱的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中使用奖励积分,但命令行也很棒)

3 个答案:

答案 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,在这种情况下,您必须更新这些以反映新位置。

如果你将它移动到一个文件夹并且根文件夹名称发生了变化,我不确定这应该如何影响遥控器,但你应该没问题。