Опишите свой рабочий процесс с помощью управления версиями (VCS или DVCS)

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

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

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

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

Спасибо.

Ответ 1

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

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

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

Сейчас:

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

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

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

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

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

Обзор кода

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

Код рефакторинга (пост-код-обзор)

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

Включить патчи

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

Освобождение новой версии вашего приложения

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

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

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

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

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

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

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

Ответ 2

Основное отличие от DVCS (Distributed Version Control) от VCS заключается в том, что он делает (по самой природе своей распределенной работы) одно, а одно хорошо:

слияния.

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

Будучи DVCS имеет два основных влияния на слияние:

Сейчас:

Внедрить функцию

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

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

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

Обзор кода

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

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

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

Код рефакторинга (пост-код-обзор)

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

Включить патчи

Тот же процесс, что и последний раздел.

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

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

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

  • repo для выпуска версий
  • репо для новых хранилищ, которые хотели внести вклад

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