Рекомендации по ветвлению TFS
У меня есть решение под названием "Framework", которое представляет собой сборку C# для моей бизнес-логики и транзакций данных.
У меня есть 4 приложения, которые используют Framework, 1 веб-сайт, 1 консольное приложение и 3 других типа приложений.
$/TeamProject
/Framework
/Dev
/Main
/Release
/WebApp
/Dev
/Main
/Release
/WCFApp
/Dev
/Main
/Release
У меня есть все это в одном командном проекте с каждой сборкой / приложением в отдельной папке.
Я хочу использовать функцию ветвления для каждого из приложений, совместно использующих сборку Framework, но я не знаю, каков наилучший способ ветвления Приложения вместе с Framework?
Какие-либо предложения?
Я знаю, как работает ветвление и слияние, но все примеры демонстрируют разветвление всего, что содержится в 1 папке.
3 ответа
В свете рисунка, представляющего каталог управления исходным кодом, я сделаю следующее предположение:
$ / TeamProject /Фреймворк /Приставка /Web /так далее.
Сначала вам нужно создать папку с именем Main
в $/TeamProject
(это будет ваша основная ветка), и переместите в нее все ваши папки верхнего уровня.
Итак, мы имеем:
$ / TeamProject /Главный /Фреймворк /Приставка / Web /так далее.
Теперь вам нужно конвертировать Main
в филиал, вы можете сделать это, щелкнув правой кнопкой мыши на Main
папку и выберите "Преобразовать в филиал". TFS теперь позволит вам ветвиться $/TeamProject/Main
в $/TeamProject/ConsoleV2
(например) и работать над функциями для V2 консоли. Вы можете изменить Консольное приложение и Платформу, если требуется в этой ветке. Когда эта работа будет завершена, вы можете отменить интегрировать (объединить) изменения обратно в Main
,
Не забывайте продолжать выполнять слияния прямой интеграции (слияния) из Main
к вашей ветке функций и разрешению любых конфликтов, чтобы синхронизировать базы кода.
Используя этот подход, вы можете изменить любую часть любого из ваших продуктов за одну атомарную регистрацию, например, вы изменили API в вашей платформе, добавив новый обязательный параметр в метод, вы можете изменить его во всех своих приложениях на в то же время, и когда вы РИ сливаются в Main
все будет обновлено.
Ваш основной вопрос, насколько я понимаю, таков: "Какова лучшая структура ветвления для ветвления моих приложений, которые зависят от Framework?" Если вы всегда собираете и версии / выпускаете их вместе, то проще и дешевле разделить их все вместе, как DaveShaw descibes; однако, если каждая из них разработана разными группами, имеет разные графики выпуска, разные версии и т. д., чем вы захотите создать ветку MAIN под каждой из них. В этом случае также должно быть понятно, кому принадлежат изменения в Framework. Обычно хорошей идеей является контроль доступа к регистрации только тем, кому это нужно для общих проектов, таких как Framework.
Если последний случай верен, то я думаю, что ваша текущая графика прекрасно с этим справится, но я бы сделал одно изменение; Держите ваши Релизы на том же уровне в иерархии, что и ветка MAIN, чтобы относительный путь оставался тем же для создания ссылок; это упростит ваши отображения рабочего пространства:
$/TeamProject
/Framework
/Dev
/Main
/Release1
/Release2
/Release3
...
/WebApp
/Dev
/Main
/Release
/Release1
/Release2
/Release3
...
/WCFApp
...
Если вы хотите иметь ветвление и слияние для отдельных проектов, единственный способ добиться этого в TFS - это создать отдельный проект TFS для каждого из проектов в вашем решении. Надеюсь, что это имеет смысл. Как только вы это сделаете, вы сможете разложить код из каждого проекта в свой рабочий каталог.
Мы недавно перенесли наш код из VSS в TFS. В то время мы должны были принять решение поместить весь код в 1 проект TFS или разбить их. Итак, у нас есть веб-сайт, бизнес-библиотека (которая используется веб-сайтом и другими приложениями), слой данных. Мы создали отдельный проект TFS для проектов библиотеки, веб-сайта и уровня данных. Каждый проект будет иметь магистральную ветку. Каждый, кому нужна последняя версия, разветвляет свою собственную копию из ствола и сливается обратно.
Надеюсь, это поможет.