Я хотел бы изучить других людей рабочий процесс при использовании или vcs или dvcs.
Опишите свою стратегию справиться со следующими задачами:
Не стесняйтесь организовывать свой ответ, не сгруппированный задачами, но сгруппированный тем, что Вы думаете, релевантно, но организуйте его VCS/DVCS (не смешивайте их).
Спасибо.
Основная особенность, которую используют все VCS для различных задач, о которых вы говорите, - это ветвление : способность изолировать усилия по разработке совместным способом. Поскольку это центральная система контроля версий, несколько разработчиков могут сотрудничать в одной ветке с пессимистическими или оптимистичными блокировками файлов, чтобы создать параллельную историю.
Но наличие VCS имеет два основных воздействия на ветвление:
Теперь:
Любая VCS сделает это, создав ветвь, но что меня сильно удивило, так это то, что «функция» ветка не проста:
* функция может стать слишком сложной
* она может быть готова к следующему выпуску
* только некоторые его часть, возможно, потребуется снова объединить с основной веткой разработки
* это может зависеть от других функций, которые еще не полностью реализованы
Поэтому вам нужно быть осторожным в том, как вы управляете своими функциональная ветка и ваши коммиты: если они тесно связаны с одной и той же функцией, все будет хорошо (вы объедините все это обратно в свою основную ветку разработки, когда вам это нужно). В противном случае частичное слияние с этими инструментами будет непросто.
Разница между исправлением ошибок во время разработки и после выпуска заключается в том, что в первом случае вы часто можете делать это линейно в одной и той же ветке, так как во втором случае вам придется установить исправление ошибки ветвь и решите, какие ошибки вам понадобятся для обратного переноса в текущую ветку разработки.
Лучше всего использовать с внешними инструментами (, например, Crucible ) и широко использует функции VCS, такие как обвинение или аннотации, чтобы лучше назначать исправления кода после проверки.
Если рефакторинг незначительный, он может быть продолжен в той же ветви. Но если он большой, необходимо настроить специальную ветку с модульным тестированием, проведенным до начала указанного рефакторинга.
Тот же комментарий, что и в последнем пункте.Если патч большой, нужно создать ветку.
VCS поможет вам только в том, что касается выпуска вашего приложения, потому что это не инструмент управления выпуском.
Сначала вам нужно будет указать версию, которая будет выпущена (метка), но после этого следует процесс развертывания, который включает:
Ключевыми моментами с VCS и управлением выпусками являются:
Механизм выпуска также влияет на двоичные зависимости:
Вы также можете выбрать зависимости от исходного кода (и получить все исходники других внутренних проектов, которые вам нужны для вашего собственного), и VCS хорошо адаптирована для этого, но не всегда возможно / практично перекомпилировать все.
Основное отличие DVCS (распределенное управление версиями) от VCS состоит в том, что он создан (по самой природе своей распределенной работы) для выполнения одного и одного действия:
слияние .
Таким образом, вы можете рассматривать упомянутые вами задачи под этим углом.
Ветви по-прежнему будут создаваться, но не все из них будут видны другим разработчикам. Многие из них фактически не покидают ваш локальный репозиторий.
DVCS имеет два основных воздействия на слияние:
Сейчас:
Как я подробно описал в своем ответе CVCS (Central VCS) , сложность ветки «функции» заключается в том, что многие вспомогательные функции будут завершены. переплетены.
Именно здесь DVCS будет сиять, поскольку они позволят вам реорганизовать свою локальную (как «еще не отправлено») историю (наборы изменений для Mercurial, SHA1 фиксирует или Git), чтобы облегчить частичное слияние , или создание дополнительных ветвей.
Вы можете почти создать ветку для каждого исправления ошибки, если хотите. Идея состоит в том, чтобы убедиться, что исправление ошибки идентифицируется простым линейным набором коммитов, объединенных обратно в ветку разработки (или ветку обслуживания, если она выпущена).
Я предпочитаю сначала перебазировать ветку исправления ошибок поверх ветки разработки (чтобы убедиться, что мои исправления по-прежнему совместимы с любой работой, которая могла быть сделана в параллельно упомянутой основной ветке), перед объединением этой ветки разработчика с веткой исправления ошибок (быстрое слияние: теперь основная ветка ссылается на все исправления)
Функция обвинения или аннотации все еще существует для Помогите назначить задачи во время проверки кода, но на этот раз все разработчики не обязательно находятся на одном сайте (поскольку это * Распределенная * VCS) и не имеют одинаковой схемы идентификации (например, не используют один и тот же LDAP).
DVCS-способ организовать проверку кода состоит в том, чтобы отправить новые изменения в специальный репозиторий для проверки кода, который:
Они выполняются в локальном репозитории разработчика, в ветке ( так как его так легко объединить обратно)
Тот же процесс, что и в предыдущем разделе.
Фактический процесс выпуска просто инициируется специальной идентифицированной (теговой) версией вашего программного обеспечения. (остальная часть «процесса управления выпуском», то есть часть развертывания и настройки, подробно описана в ответе CVCS )
Вопрос в DVCS:
«из какого репозитория будет взята эта официальная версия вашего программного обеспечения?»
Вам необходимо создать «центральный» или, скорее, «официальный» репозиторий, который будет играть роль:
Таким образом, он может служить как для целей выпуска, так и также для новых целей разработки.