Если мы представим, что вы создали его следующим образом:
#!/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статус -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, которое переписывает каждый коммит с новым идентификатором.Это зависит от того, действительно ли вы заботитесь о текущих идентификаторах коммитов (у кого-нибудь они есть?).Если нет, его легче.