Mercurial репозитории со многими активными разработчиками? - PullRequest
17 голосов
/ 08 октября 2010

Я перебираю Bitbucket , и я не могу найти ни одного репозитория Mercurial , который выглядел бы так, как, я подозреваю, выглядел бы наш репозиторий при условии, что мы перейдем на Mercurial.

Интересно, есть ли такой рабочий процесс, который мы здесь не рассматриваем?

Я говорю о том, что я провел небольшой автоматизированный тест.Мы - 14 человек, которые работают над одним проектом, разделенным на 4 команды.Чтобы смоделировать 14 (я выбрал 10, округленное число) людей, работающих параллельно над кодом, используя Mercurial DVCS, отправляя в тот же центральный главный репозиторий, я написал скрипт.

  1. Я создал новый "основной репозиторий, а затем клонировал его для 10 виртуальных людей
  2. Затем я запустил цикл итераций 1000, выбрав случайный клон и выполнив одно из следующих действий:
    • 10% времени,сделать извлечение из мастера, объединить, зафиксировать слияние и нажать
    • 90% времени, сделать локальное изменение и зафиксировать

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

Это будет имитировать людей, работающих локально, с помощью коммитов 1+ перед вытягиванием, слиянием и толканием (чтобы избежать 2+ голов вмастер репо).Возможно, этот рабочий процесс неправильный.

Это пример того, как теперь выглядит хранилище (скриншот + ссылка на репо):

sample screenshot from TortoiseHg

хранилище можно найти здесь: http://hg.vkarlsen.no/hgweb.cgi/parallel_test/graph.

Это выглядит ужасно грязно, и, как я уже сказал, я не могу найти ни одного хранилища с похожей историей.Под «грязным» я подразумеваю, что похоже, что более старая история проекта почти всегда будет иметь 10 параллельных ветвей.Близко к вершине, это, конечно, сужается, но оно будет расширяться по мере того, как люди, которые в настоящее время работают в своем локальном репозитории, подталкивают к мастеру.

Итак, у меня есть два вопроса:

  1. Что-то не так с нашим рабочим процессом (то есть рабочим процессом, который явыложили здесь)?Должны ли мы перебазировать / раздавить / пересадить, передать ответственность за толчок одному человеку, другим вещам, вместо того, как это было сделано здесь?

Ответы [ 2 ]

8 голосов
/ 08 октября 2010

Впечатляющая подготовка!

  1. Это всегда выглядит грязно, если вы немного вернетесь назад и посмотрите на все старые коммиты одновременно.Это всегда сужается, даже если смотреть на немного старую историю.См. Например, http://hg.intevation.org/mercurial/crew/graph/12402?revcount=120.Это не самый последний коммит, но показывает всю историю до этого коммита.

  2. Перебазировка очень помогает, особенно если люди работают в разных областях.(Я обычно проверяю входящие коммиты, чтобы увидеть, не существует ли потенциальный конфликт файлов или функциональности, и если нет, я делаю ребаз.)

Rebase не защищен от ошибок, поэтому слияниепредпочтительное «безопасное» действие, но оно оставляет больше «мусора» в истории.Компромисс.

Rebase похож на стандартное обновление SVN болота.Существующий материал сделан базовым, и ваши изменения идут впереди, скрестите пальцы, он все еще работает.Это полезно, но бывают моменты, когда вы чувствуете себя безопаснее, когда ваши, их и слияния являются отдельными коммитами в истории.

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

6 голосов
/ 16 октября 2010

У меня 12 разработчиков, работающих в одном и том же репозитории Mercurial, и наша история выглядит совсем не так.Иногда происходят коммиты слияния, но большинство слияний происходит от слияния фактических веток, то есть в нашей основной ветке разработки может быть слияние, вносящее изменения из выпуска исправлений, сделанного в ветке производства / выпуска.

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

Если ничего не было зафиксировано с тех пор, как они начали совершать толчок, то оно проходит безпроблемы.

Если кто-то еще совершил изменение, Mercurial жалуется, что толчок создаст удаленные головки.Затем разработчик делает hg pull --rebase и повторяет нажатие.Толчок проходит, и все довольны.

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

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