Mercurial Workflow для небольшой команды

Я работаю в команде из 3 разработчиков, и мы недавно перешли с CVS на Mercurial. Мы используем Mercurial, имея локальные репозитории на каждой из наших рабочих станций и вытягивая / отправляя на сервер разработки. Я не уверен, что это лучший рабочий процесс, так как его легко забыть нажать Push после фиксации, а 3-сторонние конфликты слияния могут вызвать настоящую головную боль. Есть ли лучший рабочий процесс, который мы могли бы использовать, так как я думаю, что сложность распределенного VC перевешивает преимущества на данный момент.

Спасибо

5 ответов

Решение

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

Вам также не нужно нажимать после каждого коммита. Ваш рабочий процесс может выглядеть примерно так:

  • Зафиксируйте часть какой-то функции.
  • Зафиксируйте еще какую-нибудь особенность.
  • Зафиксируйте последнюю часть функции.
  • Фиксируйте исправления ошибок для глупых ошибок.
  • Нажмите полную функцию для репо.

В некоторой степени это выглядит как Going Dark, но это можно облегчить, убедившись, что функции в приведенном выше примере имеют небольшие размеры.

  1. Забудьте все, что вы знаете о CVS. Mercurial совсем не похож на него, даже если некоторые команды выглядят несколько похожими.

  2. Читайте http://hginit.com/. Следуйте примерам.

  3. Забудьте все, что вы знаете о CVS.

  4. Я серьезно. Это самая сложная часть. Научитесь доверять вашему инструменту.

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

Вот рабочий процесс, который я бы предложил. Идея состоит в том, чтобы использовать более интенсивное ветвление, поэтому вам нужно реже сливаться с основной ветвью.

  1. Пусть каждый разработчик разработает каждую функцию в отдельной ветке. Сюда:

    • вы избегаете постоянного слияния изменений от других людей, и

    • Вы свободны от давления, чтобы подтолкнуть незавершенную работу до того, как следующий парень "затруднит слияние".

  2. Когда функция "выполнена" и если изменения кажутся применимыми чисто (экспертный вызов), объедините ветвь функции непосредственно с главной ветвью и удалите ветвь функции.

  3. Если объект отстает от основной ветви (многие объекты объединены), или если объединение в противном случае кажется трудным:

    1. объединить мастер в ветке функций.

    2. Находите и исправляйте любые ошибки в довольной изоляции от других разработчиков.

    3. Предполагая, что функция готова к работе, объедините ее с главной (обратите внимание: теперь объединение в этом направлении будет чистым по определению). Если нет, вы можете просто продолжить развитие.

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

Это звучит хорошо для меня. Моя команда примерно в два раза больше, и она прекрасно работает.

Я не уверен, что это лучший рабочий процесс, так как легко забыть нажать Push после коммита,

Вам не нужно нажимать после каждого коммита; Вы нажимаете, когда хотите нажать. Это большая идея о DVCS: что Commit и Push различны!

и 3 способа конфликта слияния могут вызвать настоящую головную боль.

Вы много работаете над одними и теми же строками кода? В моей команде из 5-6 программистов, которые нажимают / вытягивают несколько раз в день и совершают до нескольких десятков раз в день, я не могу вспомнить, когда в последний раз мне приходилось вручную разрешать конфликты слияния. Конечно, не в прошлом месяце или двух.

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

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

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

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

Надеюсь, вы все разберетесь!

Другие вопросы по тегам