Опишите свой рабочий процесс использования управления версиями (VCS или DVCS) [закрытый]

Я хотел бы изучить других людей рабочий процесс при использовании или vcs или dvcs.

Опишите свою стратегию справиться со следующими задачами:

  • Реализуйте опцию
  • Исправление ошибок (во время разработки и развертываемого приложения)
  • Обзор кода
  • Рефакторинг кода (обзор почтового индекса)
  • Включите патчи
  • Выпуская более новую версию Вашего приложения (рабочий стол, сеть, мобильная, Вы рассматривали бы их по-другому?)

Не стесняйтесь организовывать свой ответ, не сгруппированный задачами, но сгруппированный тем, что Вы думаете, релевантно, но организуйте его VCS/DVCS (не смешивайте их).

Спасибо.

51
задан Martin Geisler 26 May 2010 в 00:10
поделиться

2 ответа

Основная особенность, которую используют все VCS для различных задач, о которых вы говорите, - это ветвление : способность изолировать усилия по разработке совместным способом. Поскольку это центральная система контроля версий, несколько разработчиков могут сотрудничать в одной ветке с пессимистическими или оптимистичными блокировками файлов, чтобы создать параллельную историю.

Но наличие VCS имеет два основных воздействия на ветвление:

  1. Оно имеет тенденцию препятствовать фиксации, потому что после фиксации файла он немедленно повлияет на рабочую область других представлений с такой же конфигурацией (т.е. ветвь").
    ~ Процесс "публикации" является активным, с немедленными последствиями,
    ~ в то время как "потребляющая" часть (обновление вашей рабочей области) является пассивной (вы вынужден иметь дело с изменениями, опубликованными другими сразу после обновления вашего рабочего пространства)
  2. Он хорошо работает для линейного рабочего процесса слияния (т.е. в обоих направлениях »- от A к B к A к B ...).Слияние тривиально, все модификации из A просто переносятся в B

Теперь:

Реализация функции

Любая VCS сделает это, создав ветвь, но что меня сильно удивило, так это то, что «функция» ветка не проста:
* функция может стать слишком сложной
* она может быть готова к следующему выпуску
* только некоторые его часть, возможно, потребуется снова объединить с основной веткой разработки
* это может зависеть от других функций, которые еще не полностью реализованы

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

Исправление ошибок

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

Проверка кода

Лучше всего использовать с внешними инструментами (, например, Crucible ) и широко использует функции VCS, такие как обвинение или аннотации, чтобы лучше назначать исправления кода после проверки.

Рефакторинг кода (post code-review)

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

Включить исправления

Тот же комментарий, что и в последнем пункте.Если патч большой, нужно создать ветку.

Выпуск более новой версии вашего приложения

VCS поможет вам только в том, что касается выпуска вашего приложения, потому что это не инструмент управления выпуском.
Сначала вам нужно будет указать версию, которая будет выпущена (метка), но после этого следует процесс развертывания, который включает:

  • остановку того, что в настоящее время выполняется;
  • копирование новых файлов
  • их развертывание (обновление базы данных sql, веб-приложение, ...)
  • создание экземпляров всех файлов конфигурации (с правильными значениями, адресами, номером порта, путями, ...)
  • перезапуск (и если ваша система состоит из нескольких компонентов, перезапускать их в правильном порядке!)

Ключевыми моментами с VCS и управлением выпусками являются:

  • они не очень хорошо приспособлены для хранения двоичных файлов в быть выпущенными, то есть они нужны вам для создания вашего приложения, а не для хранения полученного исполняемого файла
  • , они не всегда приветствуются в производственной среде (где ограничения безопасности ограничивают доступ для записи, а также количество инструментов, работающих на этих платформах, в основном инструменты мониторинга и отчетности)

Механизм выпуска также влияет на двоичные зависимости:

  • для внешних двоичных зависимостей вы, вероятно, будете использовать такие механизмы, как maven, чтобы получить фиксированные версии внешних библиотек
  • , но для внутренних зависимостей, когда вы разрабатываете не одно приложение, а несколько, которые зависят друг от друга, вам нужно знать, как ссылаться на двоичные файлы, созданные другими приложениями (внутренние двоичные зависимости), и они обычно не будут храниться в вас • VCS (особенно на этапе разработки, когда вы можете создать множество различных выпусков для использования другими вашими приложениями)

Вы также можете выбрать зависимости от исходного кода (и получить все исходники других внутренних проектов, которые вам нужны для вашего собственного), и VCS хорошо адаптирована для этого, но не всегда возможно / практично перекомпилировать все.

43
ответ дан 7 November 2019 в 10:15
поделиться

Основное отличие DVCS (распределенное управление версиями) от VCS состоит в том, что он создан (по самой природе своей распределенной работы) для выполнения одного и одного действия:

слияние .

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

DVCS имеет два основных воздействия на слияние:

  1. вы совершаете коммит столько раз, сколько хотите. Эти коммиты не сразу видны другим (т.е. «им не придется объединять их сразу после следующего обновления их рабочего пространства»)
    ~ процесс публикации является пассивным один: ваши нажатия могут игнорироваться другими репозиториями.
    ~ "потребляющая" часть является активной: вы можете проверить, что вам было предложено, прежде чем объединить это с вашей веткой, и решить, что вы хотите объединить и от кого (и не только потому, что вы все работаете в «одной ветке»).
  2. он хорошо работает для любого рабочего процесса слияния (частичного, перекрестного, рекурсивного и т. Д.). DAG (Directed Acyclic Graph) часто используется для записи истории этими DVCS (по крайней мере, Git и Mercurial) позволяет легко найти то, что уже было объединено, и найти общего предка. Это одно важное различие между SVN и его аналогами DVCS , но есть и другие .

Сейчас:

Реализуйте функцию.

Как я подробно описал в своем ответе CVCS (Central VCS) , сложность ветки «функции» заключается в том, что многие вспомогательные функции будут завершены. переплетены.
Именно здесь DVCS будет сиять, поскольку они позволят вам реорганизовать свою локальную (как «еще не отправлено») историю (наборы изменений для Mercurial, SHA1 фиксирует или Git), чтобы облегчить частичное слияние , или создание дополнительных ветвей.

Исправление ошибок

Вы можете почти создать ветку для каждого исправления ошибки, если хотите. Идея состоит в том, чтобы убедиться, что исправление ошибки идентифицируется простым линейным набором коммитов, объединенных обратно в ветку разработки (или ветку обслуживания, если она выпущена).
Я предпочитаю сначала перебазировать ветку исправления ошибок поверх ветки разработки (чтобы убедиться, что мои исправления по-прежнему совместимы с любой работой, которая могла быть сделана в параллельно упомянутой основной ветке), перед объединением этой ветки разработчика с веткой исправления ошибок (быстрое слияние: теперь основная ветка ссылается на все исправления)

Проверка кода

Функция обвинения или аннотации все еще существует для Помогите назначить задачи во время проверки кода, но на этот раз все разработчики не обязательно находятся на одном сайте (поскольку это * Распределенная * VCS) и не имеют одинаковой схемы идентификации (например, не используют один и тот же LDAP).

DVCS-способ организовать проверку кода состоит в том, чтобы отправить новые изменения в специальный репозиторий для проверки кода, который:

  • отклоняет те коммиты, если они не соответствуют требуемым критериям качества;
  • принимает их (объединяет их с репозиторием для проверки кода) и переместите их в новое репо (например, для различных тестов)

Рефакторинг кода (пост-ревью кода)

Они выполняются в локальном репозитории разработчика, в ветке ( так как его так легко объединить обратно)

Включить исправления

Тот же процесс, что и в предыдущем разделе.

Выпуск более новой версии вашего приложения (настольного компьютера, Интернета, мобильного устройства, вы бы относились к ним по-другому?)

Фактический процесс выпуска просто инициируется специальной идентифицированной (теговой) версией вашего программного обеспечения. (остальная часть «процесса управления выпуском», то есть часть развертывания и настройки, подробно описана в ответе CVCS )
Вопрос в DVCS:
«из какого репозитория будет взята эта официальная версия вашего программного обеспечения?»

Вам необходимо создать «центральный» или, скорее, «официальный» репозиторий, который будет играть роль:

  • репозитория для версий должен быть выпущен
  • репозиторий для новых репозиториев хотел внести свой вклад

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

36
ответ дан 7 November 2019 в 10:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: