Какие руководства или стандарты Вы используете для управления версиями в Вашей команде?

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

Я предполагаю, что будут вещи как;

  • Фиксируйте часто (по крайней мере каждый день/неделю/встречу и т.д.)
  • Сборки конечных версий всегда делаются из основного ответвления
  • До выпуска новое ответвление будет создано для Тестирования и отмечено как таковое. только исправления ошибок от этой точки вперед. Финальная версия этого будет отмечена как таковая и исправления ошибок, объединенные назад в соединительную линию
  • У каждого разработчика будет общественность repo
  • Новые возможности должны получить свое собственное ответвление

Очевидно, многое из этого будет зависеть от того, что VCS Вы используете и как Вы структурировали его.

Подобные вопросы;
ответвление мерзавца, называющее лучшие практики
Существует ли стандартное соглашение о присвоении имен для тегов мерзавца?

8
задан Community 23 May 2017 в 12:30
поделиться

5 ответов

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

У нас есть так называемая "основная" ветвь, которая является кодовой базой, которая будет находиться в производстве. Заметьте, кодовая база в одной огромной структуре. Скажем, если появляется новый проект, мы должны сделать для него скопинг и назначить неделю релиза. Теперь мы должны начать работу над ним. Поэтому мы отделяем ветвь от основной, называемую ветвью фич. Команда или группа разработчиков продолжает работать в этой ветке. Обратите внимание, что одновременно с основной веткой будет отрезано множество функциональных ветвей.

Теперь, когда разработка закончена, код обычно сливается обратно в основную ветку. Мы не будем делать это напрямую, так как это может привести к хаосу из-за очевидных проблем с критичностью. Поэтому у нас есть еще одна ветвь, отделенная от основной, называемая pre-release. Мы сливаем весь наш код в эту релизную базу. И делаем сборку на полной кодовой базе. Сборка должна пройти. Когда это произойдет, мы извлечем зеленую метку времени (последняя прошедшая сборка). После получения зеленой временной метки код будет слит из предрелизной ветки в основную, и релиз будет завершен.

Как только код будет запущен в производство, и, скажем, если мы столкнемся с некоторыми ошибками, мы вырежем ветку из main, называемую веткой исправления ошибок. Вносим все изменения. И сливаем ее обратно в основную; всегда следует процессу до релиза/зеленой временной метки. Это неизбежно.

Re-base. Итак, изначально я сказал, что у нас будет резервирование, когда наша функциональная ветвь должна быть завершена. В течение этого периода времени на главной будет происходить много обновлений кода. Таким образом, необходимо, чтобы вы постоянно обновляли свою текущую ветку, чтобы быть в синхронизации с основной. Для этого выполняется процесс, называемый rebase. Это как получение новейшего кода из main, чтобы вы не работали в ветке, которая сильно устарела. В моей текущей организации rebase будет выполняться каждые 2-3 недели, хотя политика рекомендует 1 неделю.

Более интересные возможности: Скажем, я сейчас работаю над так называемой веткой Feature и хочу получить некоторый код от одной из других команд, которые также работают над своей веткой feature (этот сценарий, хотя и кажется необычным, случается часто). Для этого мы изменим наш config-spec (ClearCase - наша система контроля версий), чтобы указать на те файлы, которые требуются из другого проекта. Можно использовать либо LATEST, либо указать TIMESTAMP для извлечения файлов из другой ветки.

Через некоторое время после запуска проекта функциональная ветвь, которую мы отрезали, становится практически не нужна. Она может быть удалена из системы, скажем, через несколько лет, если пространство не позволяет.

3
ответ дан 5 December 2019 в 17:35
поделиться

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

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

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

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

Используйте файл .gitignore, чтобы файлы, которые вы не хотите отслеживать, вне контроля версий, вместо того, чтобы загромождать сообщения о статусе git или перезаписывать файл, который не должен находиться в системе контроля версий (конфигурация БД и т. Д.)

1
ответ дан 5 December 2019 в 17:35
поделиться

Регистрируйте (или продвигайте, в зависимости от вашего инструмента) рабочий код только в «главную» ветку / поток / депо / репозиторий (выберите собственное определение «основного»). Эта «основная» ветвь должна всегда оставаться компилируемой и тестируемой.

1
ответ дан 5 December 2019 в 17:35
поделиться

Только один стандарт:

  1. Проверка критических изменений приведет к удалению.
3
ответ дан 5 December 2019 в 17:35
поделиться

Мой "cvs" - это TFS, так что воспринимайте его так, как он того стоит.

Если кто-то нарушает сборку, действует правило пончика (приносит коробку пончиков на следующий день)

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

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

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

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

CVS хорошо известен, но если бы я создавал команду разработчиков/проект, я бы рассмотрел возможность использования Jira Studio

http://www.youtube.com/watch?v=2w2uN3c8pfA http://www.youtube.com/watch?v=c9pm_r8vSwM&feature=related

2
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

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