Version control 有没有办法将Mercurial回购的范围向上移动一个文件夹?

Version control 有没有办法将Mercurial回购的范围向上移动一个文件夹?,version-control,mercurial,Version Control,Mercurial,我使用mercurial repo已经有一段时间了,但最近我意识到我真的应该在文件结构中创建一个更高级别的原始repo,因为那里有一些文件我也希望进行版本控制。有没有办法将Mercurial repo提升一个级别,以便它也跟踪该文件夹中包含的文件 因此,目前的结构是: -superFolder (not under VC) -someFolder (not under VC) -someFolder (repo root, under VC) -subFolder

我使用mercurial repo已经有一段时间了,但最近我意识到我真的应该在文件结构中创建一个更高级别的原始repo,因为那里有一些文件我也希望进行版本控制。有没有办法将Mercurial repo提升一个级别,以便它也跟踪该文件夹中包含的文件

因此,目前的结构是:

-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)
我总是可以创建一个新的回购协议,但我想保留我的旧Delta


如果您知道如何使用MacHg进行操作,那么您将获得额外的积分,但是命令行也很好

如果它不是嵌套的,并且您想要移动整个回购,只需使用mv或GUI移动它,您的选择和所有操作都将保持正常,除非您有shell脚本或依赖于旧位置的东西,在这种情况下,您必须更新这些内容以反映新位置


如果您将其移动到某个文件夹,并且根文件夹名称发生更改,我不确定这会对remotes产生什么影响,但您应该会没事。

您可能应该使用-filemap选项签出。为此,您有效地创建了一个新的存储库。请注意,这将使存在的任何克隆无效,因此请明智地使用


您还可以通过将现有存储库视为superFolder下新存储库的子存储库来实现这一点。基本上,您可以按照您想要的级别创建一个新的回购协议,但不包括现有回购协议的目录。然后,将现有回购添加为新存储库的子回购。我从未尝试过这个方法,但我认为它在理论上是可行的。

如果我们想象你是这样创建的:

#!/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
汞状态-A:

C subFolder/file
C someFolder1/file
C someFolder2/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
汞状态-A:

C subFolder/file
C someFolder1/file
C someFolder2/subFolder/file 


正如你所看到的,这需要一些欺骗。但是这保留了历史,不像drharris的解决方案,它用一个新的id重写每个提交。这取决于你是否真正关心当前的提交id,是否有人拥有它们?。如果不是,他的更容易。

是在另一个回购协议中吗?你是在移动一个文件夹还是整个回购协议?编辑我的问题,希望现在更清楚。。。