Что должно идти в ветке 'default' репозитория Hg?

В больших проектах программного обеспечения Libre Source, в которых используются Mercurial или аналогичные инструменты DVCS, что считается более традиционным:

  1. Сохранение последней "стабильной" версии программного обеспечения в default ветка. Пометить каждый релиз в default так что вы знаете, какая ревизия была упакована для загрузки. Слияние патчей в default как только они будут проверены. Сохранение новых функций и т. Д. В именованных ветвях для объединения в default на следующем выпуске.
  2. Хранение каждого выпуска в именованной ветви или аналогичной. С помощью default сохранить передовой код, который предназначен только для разработчиков или очень безрассудных.

Или... есть какой-то лучший шаблон рабочего процесса, который широко принят?

4 ответа

Решение

Mercurial имеет достаточно твердое мнение о том, что вы должны использовать свой default филиал для. Это задокументировано на стандартной вики-странице ветвления. Резюме:

  • Вы не должны использовать имя, кроме default для вашей основной ветки разработки.

    Причина в том, что default это ветвь, проверенная новыми клонами. Если вы попытаетесь использовать какое-то другое имя для своей "основной" ветви, пользователи получат более или менее случайную ветку, когда они клонируют и фиксируют вещи в неправильном месте, что обычно нежелательно.

    Даже с тоннами документации, в которой написано "переходите перед добавлением новой функции" (см. Следующий пункт), люди забудут об этом, когда отправят вам патчи. У них возникает проблема с очисткой, перемещая наборы изменений.

    Поэтому всегда ставьте передовой код в default ветвиться и использовать другие ветки для ваших стабильных релизов.

  • Не рассматривайте названия филиалов как одноразовые

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

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

    Внутри Mercurial есть внутренние кэши, поэтому проблемы в основном связаны с пользовательским интерфейсом: хостинг сайтов и просмотрщиков журналов могут работать hg branches загрузить все 10000 веток в одно выпадающее меню. Это очень медленно и бесполезно для бедного пользователя, который хочет выбрать одну ветку в гигантском меню.

    Если ветви закрыты, то они не будут отображаться в hg branchesи поэтому проблема должна быть сведена к минимуму. Тем не менее, инструменты могут также хотеть показывать закрытые ветви - все зависит от инструмента.

    Извините, это немного расплывчато. Суть в том, что Mercurial создан для масштабирования по количеству изменений, а не по количеству названных веток. Мы рассмотрели самые большие проблемы с производительностью с именованными ветвями с кешем, о котором я упоминал ранее, поэтому сегодня меня не слишком беспокоит наличие большого количества ветвей, особенно если количество открытых веток остается небольшим (скажем, меньше 100).

Я впал в привычку, если использовать по умолчанию в Mercurial и master в Git для реальной работы, передового края, а также использовать теги и ветви для релизов. hgsubversion и Git-Svn, кажется, принимают эту тактику.

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

Я часто видел как упомянутую политику, так и промежуточные варианты.

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

Младшие версии формируют именованные ветви, каждый выпуск в такой ветви является тегом. Ветви с исправлениями объединяются после завершения в ветки "по умолчанию" и активные версии

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

Там нет огромного количества в этом. Если мы говорим только о ветвях DEV & STABLE, то по умолчанию это в основном соглашение об именах. Я бы предпочел использовать DEV по умолчанию, просто потому, что большая часть работы происходит в ветке dev, и если это ветка по умолчанию, она менее трудоемка.

Лично я предпочитаю именованную ветку за выпуск. После этого исправления могут распространяться на эти ветки и переноситься с относительной легкостью на все выпуски после использования. hg merge, Если вы попытаетесь сделать то же самое с DEV и STABLE, у вас может быть только один поддерживаемый выпуск (последний), или ваша стабильная ветвь начнет наращивать ветки, и вы получите (возможно, менее организованную) версию ветки для каждого выпуска. состав.

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