** Этот вопрос был отклонен и определен как дубликат, хотя другой предложенный повторяющийся вопрос значительно отличается от моего сценария. Эта проблема заключается в том, как объединить уже существующие ветки. Мой вопрос заключается в том, как правильно/идеально изменить структуру проекта/добавить ветки для существующего проекта без веток. Я даже связался с другим вопросом, который точно такой же, как у меня, за исключением того, что у меня есть дополнительные вопросы, на которые в этом вопросе нет ответа.
Это, вероятно, довольно просто, но у меня чертовски много времени, чтобы выяснить рекомендуемый подход для добавления ветвления к существующему проекту в TFS2013, который никогда не использовал ветвление. Этот пост является той же проблемой (для TFS2010), но ответ оставляет некоторые вопросы.
Мой конкретный сценарий заключается в том, что у меня есть старый проект, у которого никогда не было ветвей и который не был настроен для ветвления. Из того, что я читал, кажется, что рекомендуется начинать с папок /main /dev и /releaseX /releaseY и сразу же преобразовывать их все в ветки, но этот корабль отплыл давным-давно. Компания, в которой я работаю, должна иметь возможность поддерживать ветки выпуска исправлений для клиентов, у которых много разных версий.
Одна из рекомендаций заключалась в том, чтобы просто преобразовать командный проект верхнего уровня в ветвь и рассматривать ее как основную ветвь. Это кажется хорошим, но я также читал, что вы не можете создавать какие-либо ветки внутри ветки, так как/где мне приступить к созданию веток выпуска?
Текущая структура выглядит так, а папки релизов - это то, что я имел в виду:
- server\default collection
- team project
- ...all the project's files and folders
- ReleaseBranches
Итак, мне нужно создать папку "Главная", переместить в нее все файлы и папки проекта, превратить ее в ветку, а затем настроить выпускные ветки на этом уровне? Или есть способ преобразовать корневую папку в ветку и разместить под ней ветки релиза? Или мне нужно создать отдельный проект для каждой ветки? Или можно не иметь основной ветки и просто создавать ветки для релизов (я понимаю, что это, вероятно, не лучший вариант - это затруднит слияние)?
Это очень небольшая команда, и я хотел бы, чтобы изменения были как можно более простыми, и сделать так, чтобы команде было как можно проще объединять исправления ошибок из основной части в более старые выпуски. У меня есть еще одна мысль, как это может повлиять на установленную мной сборку CI. Если ветки существуют в коллекции проекта, смешанной с основным кодом, будет ли проверка ветки выпуска запускать сборку CI?
Ответ 1 · рейтинг 2 · DaveShaw
Если бы я настроил ветвление в зависимости от ситуации...
Итак, мне нужно создать "Главную" папку, переместить в нее все файлы и папки проекта, превратить ее в ветку, а затем настроить выпускные ветки на этом уровне?
Да, это, пожалуй, лучшее начало.
Или есть способ преобразовать корневую папку в ветку и разместить под ней ветки релиза?
Я не думаю, что вы можете создать Team Project в ветке, и если бы вы могли, вы бы не хотели, чтобы ваши выпуски были там.
Или мне нужно создать отдельный проект для каждой ветки? Или можно не иметь основной ветки и просто создавать ветки для релизов (я понимаю, что это, вероятно, не лучший вариант - это затруднит слияние)?
Как вы создали эти "ветви релиза"? Вы папки разветвляли?
Это оставит вашу структуру такой:
Team Project
>Main
>Release Branches
>Rel1
>Rel2
В зависимости от того, как вы сейчас поддерживаете свои ветки релиза, я бы оставил их такими, какие они есть, и продолжал бы "сливать" изменения в них, как вы. Если вы действительно хотите, вы можете попытаться воссоздать их, как только появится "Основная" ветвь, используя опцию "Ветка из набора изменений" в TFVC.
В будущем вы сможете разветвлять каждый выпуск из основного, когда он будет выпущен. Вы также можете создавать ветки функций из Main, если вам когда-нибудь понадобится выполнить длительную разрушительную работу.
Ответ 2 · рейтинг 2 · Davatar
Я все же считаю, что это законный вопрос, так как я тоже столкнулся с подобной проблемой. Вот что я сделал со своим тестовым проектом "BranchTesting" (а позже и с продуктивным проектом). Самое замечательное в этом то, что он сохраняет историю изменений всех файлов:
- Создайте резервную папку на вашем компьютере текущей версии вашего источника. Во время следующих шагов ваш файл в сопоставленной папке будет полностью стерт и переопределен для каждой версии, которую вы хотите записать в ветки Release.
- Убедитесь, что все ваши изменения зарегистрированы и что у вас есть описание набора изменений или метка, идентифицирующая самую новую версию (например, "Самая новая версия").
- Создайте 3 папки "Main", "Dev" и "Release" (или Main и Release, если вам не нужна папка Dev) в системе управления версиями.
- В выпуске подпапок создайте папки для каждого выпуска (например, 1.0.0 и 1.0.1 или как работает ваше управление выпусками)
- Щелкните правой кнопкой мыши командный проект и зарегистрируйте папки.
- Щелкните правой кнопкой мыши каждую из папок Release (не корень "Release", просто "1.0.0" и т. д.) -> Ветвление и слияние -> Преобразовать в ветку
- Добавьте описание для ветки, установите флажок "Рекурсивно выполнять это преобразование для всех папок, ранее разветвленных из этой папки" и нажмите "Преобразовать". Папки теперь отображаются как ветки. Это не требует регистрации.
- Щелкните правой кнопкой мыши свой командный проект -> Дополнительно -> Получить конкретную версию.
- Найдите набор изменений или метку версии 1.0.0 и убедитесь, что установлены флажки "Перезаписывать незарегистрированные файлы с возможностью записи" и "Перезаписывать все файлы, даже если локальная версия соответствует указанной версии". Это удалит все папки на диске, которые вы ранее создали!
- Щелкните правой кнопкой мыши корень "Release" и получите последнюю версию. Это загрузит папку и подпапки на ваш компьютер.
- В Проводнике Windows перейдите в папку проекта и скопируйте все загруженные элементы (обычно sln-файл и папку с исходным кодом) в подпапку Release/1.0.0.
- Убедитесь, что вы видите разделенный экран проводника управления версиями (VS) и проводника Windows. Теперь переместите ранее скопированные файлы с помощью перетаскивания в ветку управления версиями 1.0.0.
- Щелкните правой кнопкой мыши ветку и зарегистрируйтесь. Отметьте его как "Добавлен исходный код в ветку Release 1.0.0".
- Повторите шаги 8-13 для всех выпусков.
- Когда все выпуски будут выполнены, щелкните правой кнопкой мыши самую новую ветку выпуска --> Ветвление и слияние --> Объединить
- Выберите основную ветвь и выполните слияние без базы. Это гарантирует, что ваша основная ветка получит историю набора изменений из релиза.
- Необязательно, щелкните правой кнопкой мыши главную ветку --> Ветвление и слияние --> Ветвь и выберите папку Dev, чтобы создать ветку Dev.
Я пошел немного дальше и создал 2 подпапки в папке Dev, чтобы создать 2 параллельных ветки Dev, но это на ваше усмотрение. Вот как это выглядело в конце:
Вот история набора изменений: А вот история файла программы (из тестовой программы):
Изменить: я понимаю, что imgur не хранит изображения вечно, поэтому здесь с текстом:
Team Project
> Dev
> EligibilityEnhancement
> BranchTesting
> Ryan
> BranchTesting
> Main
> BranchTesting
> Release
> 1.0.0
> BranchTesting
> 1.0.1
> BranchTesting