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

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

Спасибо

Ответ 1

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

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

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

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

Ответ 2

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

  • Прочитайте http://hginit.com/. Следуйте приведенным ниже примерам.

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

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

Ответ 3

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

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

  • Каждый разработчик разрабатывает каждую функцию в отдельной ветке. Таким образом:

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

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

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

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

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

Ответ 5

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

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

Надеюсь, что вы его отсортировали!