Вне часов я попытаюсь придумать стратегию контроля версий для моей компании; в настоящее время мы используем SVN, но у него нет структуры - у нас в основном есть только транк, и мы только фиксируем это. Недавно менеджер по разработке запустил второй репозиторий, который действует как наш «тег», но его необходимо вручную объединить с «стволом», поскольку он не является частью того же репозитория, а совершенно отдельным. По сути, есть только одна папка, которая называется «Dev» (на самом деле разные папки «Dev» в разные даты, но только «Dev» является основной), и под этим находится все остальное; все остальные проекты. Он вообще не организован проектом, у него нет понятия ветвей / тегов / ствола или чего-то еще. Человек, который установил это изначально (давно ушел, конечно), казалось, вообще не знал, как настроить SVN, и с тех пор никто не удосужился научиться делать что-то правильно, опасаясь что-то сломать. Мы не используем какие-либо CI (или, к сожалению, автоматическое тестирование).
Во-первых, мы должны отделить его от проекта? Например, у нас есть: два веб-сайта ASP.NET (не веб-приложения, веб-сайты), веб-служба, папка развертывания для всех табличных сценариев и хранимых процедур, два клиента командной строки для внешних проектов, которые вызываются Веб-сайты и общая папка, которая имеет общие бизнес-объекты и тому подобное. Должен ли каждый из них быть своим собственным проектом с настройкой branch / tag / trunk, или это должно быть так:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
и есть все ветви и все есть копия всей папки Dev? Такой подход может быть легче проглотить, поскольку у нас часто возникают ситуации, когда нам необходимо внести изменения в библиотеку общего кода и по крайней мере один (обычно оба) веб-сайтов.
Во-вторых, мы делаем регулярные выпуски (на нашем языке «толкает») на наш сервер разработки и живой сервер. Из того, что я прочитал, лучший способ справиться с этим будет состоять в том, что вся разработка идет в ствол /, ветви являются «временными» и используются для добавления новой функции, которая может повлиять на ствол, а теги предназначены для релизов? Итак, каждый месяц мы работаем, скажем так, и я работаю над новым модулем. Я бы разветвлял магистраль и использовал эту ветку для своего кода, писал и тестировал его и все такое. Когда модуль будет готов, я сливаю его обратно в транк (и, возможно, удаляю ветку), и когда мы будем готовы к развертыванию, мы помечаем его (скажем, «May2011»). Если у нас есть исправление ошибки после его запуска, оно будет исправлено в теге May2011 и объединено с транком (так что транк также получит исправление), и тогда May2011 будет снова вытеснен с исправлением? Это намерение пометки?