Mercurial и своего рода рабочий процесс Continuous Integration для Java - PullRequest
0 голосов
/ 02 февраля 2009

Есть проект на Java, где я работаю.

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

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

Итак, в ртутных терминах есть:

  1. Основной репо со всеми классами
  2. Небольшое репо с изменениями и новыми классами

Я хочу сделать слияние из репо B на репо. А затем я хочу вытащить и обновить только те классы (* .java), которые существуют в моем репо B.

Я безуспешно пытался это:

  1. Для создания B-репо я клонирую A-репо и Я удаляю все файлы.
  2. Когда мне нужно изменить .java, я делаю wget конкретного файла ртутный сервер в моем локальном машина. Когда файл новый, я просто запустите hg add.
  3. Для коммитов я делаю hg commit -I file1 -i file2 ... -i fileN для всех файлы, существующие в рабочем папка B repo.

Тогда неудачная часть:

  1. Я не могу сделать обновление hg только существующие файлы.
  2. Когда B-репо объединяется с A-репо это все нормально. Но я не могу запустить HG коммит слитого состояния с -I параметр. Все или ничего.
  3. Когда я вытаскиваю из репо и пытаюсь обновление у меня та же проблема 4.

Мне известно о hg pull -f для начала с несвязанного репо для B репо вместо клона. Но у него та же проблема обновления. И это выглядит довольно некрасиво.

Я думаю, что Плагин трансплантации это может помочь. Я также читал это Как объединить два проекта в Mercurial? .

Сохранение истории файлов в репо является обязательным, даже если эта история была сгенерирована в репо.

Знаете ли вы, как этого добиться?

спасибо

1 Ответ

4 голосов
/ 02 февраля 2009

То, что вы ищете, называется Partial Clone и не поддерживается в Mercurial.

Честно говоря, ваш рабочий процесс звучит довольно неэффективно - создание репозитория с подмножеством и попытка синхронизировать его - это борьба с тем, как эти инструменты предназначались для использования. Почему бы просто не собрать нужную банку из полного репо, а включить только специальные классы в тег ant (надеюсь) <jar>. У нас есть хранилище с тысячами классов, и build all выводит много разных jar-файлов, каждый из которых является подмножеством всей вселенной классов.

Тем не менее, если вы должны придерживаться текущего рабочего процесса, вы должны изменить его. Не клонируйте полный репозиторий, а затем удалите ненужные файлы, потому что вы все еще включаете их полную историю.

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

...