Как совместить два проекта в Mercurial?


84

У меня есть два отдельных репозитория Mercurial. На этом этапе имеет смысл «стать одним», потому что я хочу работать над двумя проектами одновременно.

Мне бы очень хотелось, чтобы каждый из двух проектов был подкаталогом в новом репозитории.

  1. Как мне объединить два проекта?
  2. Это хорошая идея, или я должен держать их отдельно?

Кажется, я должен иметь возможность перемещаться из одного репозитория в другой ... Может, это действительно просто?

Ответы:


69

Я смог объединить два моих репозитория таким образом:

  1. Используйте hg clone first_repositoryдля клонирования одного из репозиториев.
  2. Используйте hg pull -f other_repositoryдля извлечения кода из другого репозитория.

-f(Сила) флаг на тянуть является ключевым - это говорит игнорировать тот факт , что два хранилища, а не из того же источника.

Вот документация по этой функции.


1
Сохраняет ли это хеш-ключи коммитов из второго репо? (Думаю, что нет, но это может быть нормально, пока вы не выполните слияние.)
Macke

6
Это работает, но вам также нужно будет бежать, hg mergeчтобы, наконец, все заработало
Factor Mystic

7
@Marcus Lindblom: извлечение набора изменений никогда не изменит его хэш. Если вы посмотрите на это hg glogпосле этого, то увидите, что у вас есть две несвязанные строки наборов изменений. Первый набор изменений в каждой строке не имеет родителя, но для Mercurial это не проблема. Как только вы потянете, вы захотите создать по одному новому набору изменений для каждой строки, где вы hg mvвсе в соответствующей подпапке, затем вы объедините строки, и все готово.
Стив Лош,

1
что, если два репозитория имеют общий код для них обоих. Будет ли это автоматически обработано слиянием? а что касается слияния, мы можем просто сказать $ hg merge?
Камал

2
для справки, вот документы для этого процесса mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Гент,

7

hg начал иметь субрепо с 1.3 (2009-07-01). Ранние версии были неполными и шаткими, но теперь они вполне пригодны для использования.


2
Я обнаружил, что работать с подрепо очень сложно. Они работают, но вы должны перепрыгнуть через некоторые препятствия, чтобы заставить их вести себя хорошо, и могут стать источником множества головных болей, если вы не будете осторожны.
Пит Дункансон

4
Возможно, стоит отметить, что субпозитории официально являются последней инстанцией: mercurial.selenic.com/wiki/Subrepository (по состоянию на 2013.11.12)
jtpereyda

3

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

О вашем редактировании: перемещение из одного репозитория в другой. Вы всегда можете использовать transplantкоманду. Хотя все это на самом деле является отступлением от вашего желания объединить их, поэтому вы можете чувствовать себя некомфортно, используя мои предложения. Тогда вы можете использовать расширение леса или что-то в этом роде.

hg transplant -s REPOSITORY lower_rev:high_rev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.