Mercurial Workflow для небольшой команды
Я работаю в команде из 3 разработчиков, и мы недавно перешли с CVS на Mercurial. Мы используем Mercurial, имея локальные репозитории на каждой из наших рабочих станций и вытягивая / отправляя на сервер разработки. Я не уверен, что это лучший рабочий процесс, так как его легко забыть нажать Push после фиксации, а 3-сторонние конфликты слияния могут вызвать настоящую головную боль. Есть ли лучший рабочий процесс, который мы могли бы использовать, так как я думаю, что сложность распределенного VC перевешивает преимущества на данный момент.
Спасибо
5 ответов
Если вы сталкиваетесь с множеством трехсторонних слияний, это может быть связано с тем, что у вас слишком много общего в том, над чем вы и члены вашей команды работаете. Mercurial довольно хорош в обработке слияний, если вы все не редактируете одни и те же строки файла. Если возможно, вы могли бы разделить работу более четко и избежать некоторых головных болей крупных слияний. Также обратите внимание, что это все еще будет проблемой с CVS, так как это, возможно, хуже при слиянии, чем Mercurial.
Вам также не нужно нажимать после каждого коммита. Ваш рабочий процесс может выглядеть примерно так:
- Зафиксируйте часть какой-то функции.
- Зафиксируйте еще какую-нибудь особенность.
- Зафиксируйте последнюю часть функции.
- Фиксируйте исправления ошибок для глупых ошибок.
- Нажмите полную функцию для репо.
В некоторой степени это выглядит как Going Dark, но это можно облегчить, убедившись, что функции в приведенном выше примере имеют небольшие размеры.
Забудьте все, что вы знаете о CVS. Mercurial совсем не похож на него, даже если некоторые команды выглядят несколько похожими.
Читайте http://hginit.com/. Следуйте примерам.
Забудьте все, что вы знаете о CVS.
Я серьезно. Это самая сложная часть. Научитесь доверять вашему инструменту.
Похоже, вы все вносите изменения в одну и ту же ветку. Это имеет неудовлетворительный побочный эффект, когда вы объединяете изменения друг с другом почти в каждом коммите, что было бы хорошо, за исключением того, что вручную вмешиваться в конфликты - это не то, что вы хотите делать каждый раз, когда нажимаете.
Вот рабочий процесс, который я бы предложил. Идея состоит в том, чтобы использовать более интенсивное ветвление, поэтому вам нужно реже сливаться с основной ветвью.
Пусть каждый разработчик разработает каждую функцию в отдельной ветке. Сюда:
вы избегаете постоянного слияния изменений от других людей, и
Вы свободны от давления, чтобы подтолкнуть незавершенную работу до того, как следующий парень "затруднит слияние".
Когда функция "выполнена" и если изменения кажутся применимыми чисто (экспертный вызов), объедините ветвь функции непосредственно с главной ветвью и удалите ветвь функции.
Если объект отстает от основной ветви (многие объекты объединены), или если объединение в противном случае кажется трудным:
объединить мастер в ветке функций.
Находите и исправляйте любые ошибки в довольной изоляции от других разработчиков.
Предполагая, что функция готова к работе, объедините ее с главной (обратите внимание: теперь объединение в этом направлении будет чистым по определению). Если нет, вы можете просто продолжить развитие.
Мы используем Mercurial, имея локальные репозитории на каждой из наших рабочих станций и вытягивая / отправляя на сервер разработки.
Это звучит хорошо для меня. Моя команда примерно в два раза больше, и она прекрасно работает.
Я не уверен, что это лучший рабочий процесс, так как легко забыть нажать Push после коммита,
Вам не нужно нажимать после каждого коммита; Вы нажимаете, когда хотите нажать. Это большая идея о DVCS: что Commit и Push различны!
и 3 способа конфликта слияния могут вызвать настоящую головную боль.
Вы много работаете над одними и теми же строками кода? В моей команде из 5-6 программистов, которые нажимают / вытягивают несколько раз в день и совершают до нескольких десятков раз в день, я не могу вспомнить, когда в последний раз мне приходилось вручную разрешать конфликты слияния. Конечно, не в прошлом месяце или двух.
Есть ли лучший рабочий процесс, который мы могли бы использовать, так как я думаю, что сложность распределенного VC перевешивает преимущества на данный момент.
Возможно, вам следует описать свой рабочий процесс более подробно, потому что единственная сложность по сравнению с централизованным управлением версиями, с которой я сталкиваюсь в обычный рабочий день, это, возможно, одна команда, и преимущества огромны. Выполнение "hg вины" только один раз экономит мне больше времени по сравнению с централизованной версией, чем все "hg push", которые мне приходилось печатать весь год!
Что бы это ни стоило, мы команда такого же размера, работающая с Mercurial впервые, и мы начали с той же проблемы.
Мы упорствовали и сейчас дела обстоят значительно лучше. Я думаю, что большинство проблем возникли, когда кодовая база была крошечной, и все люди пытались работать над одним и тем же. Теперь, когда это немного более устоявшиеся люди не так сильно наступают друг другу на ноги, а Париж сильно сократился.
Надеюсь, вы все разберетесь!