Практика контроля версий

В моей текущей работе супервизор практикует только проверку готового кода. Совсем недавно над проектом, в котором я участвовал, работали 3 разных разработчика с некоторым перекрытием файлов. Это означало ручную интеграцию изменений, несмотря на то, что некоторые изменения заняли один день, а затем это было сделано. Я хотел посмотреть, является ли это обычной практикой, и получить предложения о том, как изменить эту практику, зная, что много раз мое мнение мало что значит в общей схеме вещей.

11 ответов

Решение

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

Частные ветки: позволяют проверять и работать с кодом, пока вы идете, объединяя туда и обратно в подходящее время.

Shelvesets / pacakaged наборы изменений: позволяют хранить наборы изменений и отправлять их на проверку - убедитесь, что они готовы к работе до регистрации.

Относительно того, является ли это подходящим способом работы, мы не разрешаем регистрироваться в основных филиалах без предварительного рассмотрения. Чтобы пройти рецензирование, ваш код должен пройти различные автоматизированные инструменты, а затем должен быть приемлем для вашего рецензента. Для некоторых определений "производство готово" - вот оно. Поэтому мы делаем что-то вроде того, что вы делаете. Тем не менее, мы используем частные филиалы, чтобы гарантировать, что проверки все еще могут быть сделаны, пока это происходит, и что другие проверки не должны вмешиваться.

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

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

Начните с переключения с VSS на что-то более надежное и многофункциональное. См. Как убедить компанию сменить систему контроля версий

Затем примените известные хорошие практики:

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

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

  • Высококачественные автоматизированные приемочные испытания.

Разве не было бы хорошей идеей иметь тестовую ветвь репозитория, в которой можно было бы проверять непроизводственный код готовности после внесения изменений и тестирования?

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

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

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

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

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

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

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

@bpapa

Ночное резервное копирование рабочих папок на серверы предотвратит потерю рабочего дня.

@tonyo

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

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

Заходите рано и регистрируйтесь часто по двум основным причинам -

1 - это может упростить интеграцию кода

2 - в случае, если ваш компьютер взрывается, ваши недели работы не прошли

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

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

Но вы не выиграете конкурс популярности, если внесете некомпилируемый / явно неработающий код в "ствол" или "ветвь релиза".

У прагматичных программистов есть книга под названием " Прагматическое управление версиями с использованием Subversion", в которой есть раздел с советами по веткам.

Я думаю, что это может быть контроль версий, который мы используем, VSS в сочетании с нехваткой времени для изучения ветвления. Мне очень нравится идея ночных проверок, чтобы помочь с разработкой и избежать 'Going Dark'. Я вижу, как он устойчив к стволам, но, возможно, строит SS для разработки, а когда код готов к работе, перенесет его в SS.

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