Совет по слиянию из несвязанного репозитория с Mercurial

У меня есть два несвязанных репозитория "public" и "develop":

prj/
  public/
  develop/

В «develop» много коммитов, потому что здесь я работаю. Может быть, даже несколько голов. Время от времени я хочу опубликовать снимок репозитория разработки.

Из общей папки я мог бы сделать это:

>hg pull -f ../develop
>hg merge
>hg commit -m "alpha2"

Но это также вытянет полную историю набора изменений из «разработки» в «общедоступную» (а это не то, что я хочу).

Я также мог бы удалить все файлы из «общедоступного», кроме подпапки «.hg». Затем вручную скопируйте все файлы из каталога «develop» и выполните

>hg commit -m "alpha2"

Но тогда мне нужно «добавить» новые файлы, «удалить» устаревшие файлы и снова «переименовать» перемещенные файлы.

Использование опции -A с фиксацией приведет к слепому добавлению/удалению всех файлов, даже если они не контролируются в репозитории «разработки».

Должен быть более эффективный способ сделать это ;-)


person mar10    schedule 02.09.2009    source источник


Ответы (1)


Я бы посоветовал вам просто просмотреть всю историю, но если вы по какой-то причине не можете это переварить, вы можете сделать любую из этих вещей:

  1. используйте ConcatenatingChangesets, чтобы объединить все наборы изменений из development в единый результирующий набор изменений в открытом доступе -или-
  2. удалите все общедоступные файлы, создайте «hg-архив» в разработке и разверните его общедоступно — это даст вам только контролируемые файлы -или
  3. используйте «hg manifest» в разработке, чтобы xargs мог перемещать только те файлы, которые вам нужны -или-
  4. сделайте «hg diff -r last-changeset-in-public -r tip» в разработке, а затем примените полученный результат diff с помощью «hg import» публично, и вы получите полные изменения в виде единого набора изменений в общедоступном

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

person Ry4an Brase    schedule 02.09.2009