2011-03-26 70 views
2

我一直在使用一個可愛的mercurial repo,但最近才意識到,我真的應該在文件結構中創建一個更高級別的原始回購,因爲那裏有那些文件,我也想成爲版本-受控。有沒有辦法將Mercurial 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

它是否在另一個回購?你在移動一個文件夾還是整個回購? – 2011-03-26 05:14:42

+0

編輯我的問題,希望現在更清楚... – Ender 2011-03-26 05:17:48

回答

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 

  汞柱狀態-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 

  汞柱狀態-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 

正如你所看到的,它需要一些finagling。但這與drharris的解決方案不同,它保留了歷史記錄,它使用新的ID重寫每一次提交。這取決於你是否真的關心當前的提交id(是否有人擁有它們?)。如果不是,他更容易。

0

如果它沒有嵌套,並且想要移動整個回購,只需移動它(使用mv或GUI,您的選擇),並且除非您有shell腳本或依賴於舊位置的東西,否則一切都會保持A-OK,其中如果您不得不更新這些以反映新位置。

如果您將它移動到一個文件夾並且根文件夾名稱發生更改,我不確定這會如何影響遙控器,但您應該沒問題。

2

您應該使用--filemap選項檢出Convert Extension。爲此,您正在有效地創建一個新的存儲庫。請注意,這將使任何外部的克隆無效,因此請明智地使用。

您也可以通過將現有存儲庫視爲superFolder下新存儲庫的子文件夾來執行此操作。基本上,您可以根據需要創建新的回購協議,但排除現有回購協議的目錄。然後,將您現有的回購作爲新存儲庫的子庫添加。我從來沒有試過這個,但我認爲它理論上是可行的。

相關問題