Подтвердить что ты не робот

Как импортировать ртутное репо (включая историю) в другое Mercurial repo в качестве подкаталога, не используя subrepos?

Это звучит довольно сложно, поэтому позвольте мне объяснить:

Project_A некоторое время проживает в своем собственном репозитории Mercurial. Project_A теперь сворачивается в новый суперпроект Super-Project_B. Super-Project_B также имеет ртутный репозиторий. Мы предпочли бы, чтобы Project_A не был подрепором, а вместо этого просто нормальным ребенком, но мы также не хотим терять историю. Есть ли способ сделать это?

4b9b3361

Ответ 1

Да. Используйте расширение конвертации для перемещения projectA вниз на один уровень каталога:

hg convert --filemap filemap.txt projectA projectA-redone

где ваш filemap.txt имеет эту строку:

rename . projectA

(эта точка может быть косой чертой, но я так не думаю).

Это даст вам новый репо, projectA-redone, который имеет всю историю A, хотя все изменения будут иметь разные хэши, поскольку их контент (пути) изменились, чтобы получить "projectA" перед всеми из них.

Затем вы перейдете в Super-Project_B и выполните hg pull -f /path/to/projectA-redone. Вам нужно -f, потому что в противном случае вам будет сказано, что репозитории не связаны между собой, поскольку они не имеют общих наборов изменений.

Наконец, вы сделаете hg merge в Super_project_b, у которого не должно быть конфликтов (если у вас уже нет каталога projectA, в этом случае вы должны были бы выбрать другое имя или hg remove d вначале).

После этого B будет иметь все A внутри подкаталога projectA, и вся история будет неповрежденной.