我使用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)我总是可以创建一个新的repo,但我想保留我的旧deltas...
(如果你知道如何在MacHg中做这件事,那就加分,但命令行也很棒)
发布于 2011-03-26 13:42:17
如果我们想象您创建了它,如下所示:
#!/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状态-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状态-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重写每个提交。这取决于您是否真正关心当前的提交ids (有人拥有它们吗?)。如果不是,他的就更容易了。
发布于 2011-03-26 13:21:39
您可能应该使用--filemap选项查看Convert Extension。为此,您可以有效地创建一个新的存储库。请注意,这将使存在的任何克隆无效,因此请明智地使用。
您还可以通过将现有存储库视为superFolder下新存储库的子存储库来实现这一点。基本上,您可以在所需的级别创建一个新的存储库,但要排除现有存储库的目录。然后,将现有存储库添加为新存储库的子存储库。我从来没有尝试过,但我认为它在理论上是可行的。
发布于 2011-03-26 13:15:27
如果它不是嵌套的,并且您想要移动整个存储库,只需移动它(使用mv或GUI,您可以选择),一切都将保持A-OK,除非您有shell脚本或依赖于旧位置的东西,在这种情况下,您必须更新这些脚本以反映新位置。
如果你把它移到一个文件夹中,而根文件夹的名称发生了变化,我不确定这会对远程有什么影响,但你应该没问题。
https://stackoverflow.com/questions/5440425
复制相似问题