Есть ли способ перенести объем репозитория Mercurial на одну папку? - PullRequest
2 голосов
/ 26 марта 2011

Я уже некоторое время пользуюсь прекрасным ртутным репо, но недавно понял, что мне действительно следовало создать оригинальное репо на один уровень выше в файловой структуре, так как там есть файлы, которыми я тоже хочу бытьконтроль версии.Есть ли способ «продвинуть» репозиторий 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 ]

3 голосов
/ 26 марта 2011

Если мы представим, что вы создали его следующим образом:

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

2 голосов
/ 26 марта 2011

Вам, вероятно, следует проверить Преобразовать расширение с опцией --filemap.Для этого вы эффективно создаете новый репозиторий.Обратите внимание, что это лишит законной силы любые клоны, которые там существуют, поэтому используйте их с умом.

Вы также можете сделать это, рассматривая ваш существующий репозиторий как подпункт нового репозитория в superFolder.По сути, вы создаете новое репо на желаемом уровне, но исключаете каталог вашего существующего репо.Затем добавьте свое существующее хранилище в качестве вложенного хранилища нового хранилища.Я никогда не пробовал это, но я думаю, что это будет работать в теории.

0 голосов
/ 26 марта 2011

Если он не является вложенным, и вы хотите переместить весь репозиторий, просто переместите его (используя mv или GUI, ваш выбор), и все останется в порядке, если у вас нет сценариев оболочки или чего-то, что зависит от старого местоположения, в этом случае вам придется обновить их, чтобы отразить новое местоположение.

Если вы переместите его в папку и имя корневой папки изменится, я не уверен, как это повлияет на пульты, но с вами все будет в порядке.

...