Создайте новую ветку релиза для существующего командного проекта в TFS2013/TFVC.

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


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

Мой конкретный сценарий заключается в том, что у меня есть старый проект, у которого никогда не было ветвей и который не был настроен для ветвления. Из того, что я читал, кажется, что рекомендуется начинать с папок /main /dev и /releaseX /releaseY и сразу же преобразовывать их все в ветки, но этот корабль отплыл давным-давно. Компания, в которой я работаю, должна иметь возможность поддерживать ветки выпуска исправлений для клиентов, у которых много разных версий.

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

Текущая структура выглядит так, а папки релизов — это то, что я имел в виду:

  • server\default collection
    • team project
      • ...all the project's files and folders
      • ReleaseBranches
        • Release 1
        • Выпуск 2

Итак, мне нужно создать папку «Главная», переместить в нее все файлы и папки проекта, превратить ее в ветку, а затем настроить выпускные ветки на этом уровне? Или есть способ преобразовать корневую папку в ветку и разместить под ней ветки релиза? Или мне нужно создать отдельный проект для каждой ветки? Или можно не иметь основной ветки и просто создавать ветки для релизов (я понимаю, что это, вероятно, не лучший вариант — это затруднит слияние)?

Это очень небольшая команда, и я хотел бы, чтобы изменения были как можно более простыми, и сделать так, чтобы команде было как можно проще объединять исправления ошибок из основной части в более старые выпуски. У меня есть еще одна мысль, как это может повлиять на установленную мной сборку CI. Если ветки существуют в коллекции проекта, смешанной с основным кодом, будет ли проверка ветки выпуска запускать сборку CI?


person Dave Novelli    schedule 06.07.2015    source источник
comment
Я не уверен, почему меня минусуют??   -  person Dave Novelli    schedule 06.07.2015
comment
возможный дубликат стратегий ветвления и слияния TFS   -  person nschonni    schedule 07.07.2015
comment
Это даже не близко к тому, чтобы быть дубликатом этого вопроса - у этого человека уже есть ветки, и они ищут руководство по слиянию. Мой вопрос касается исключительно того, как изменить структуру моего проекта/исходного кода, чтобы я мог ДОБАВЛЯТЬ ветки в существующий проект, у которого никогда не было ветвей. Я даже связался с дубликатом моего вопроса (в другой версии TFS) и объяснил, что я хотел понять больше, чем ответил в этом вопросе.   -  person Dave Novelli    schedule 07.07.2015
comment
Я проголосовал, отличный вопрос   -  person Hakan Fıstık    schedule 23.12.2015
comment
Я тоже не понимаю, почему тебя минусуют. Я точно в такой же ситуации. Удалось ли вам решить это в конце концов?   -  person Pseudonymous    schedule 22.01.2016
comment
Я как бы решил это - я просто переместил весь текущий код в новую основную папку на корневом уровне, а затем создал папку ветки выпуска из существующих ярлыков. В ветках, созданных из меток до этой реструктуризации, отсутствуют некоторые функции слияния, но новые ветки после реструктуризации работают нормально.   -  person Dave Novelli    schedule 22.01.2016


Ответы (2)


Если бы я настроил ветвление в зависимости от ситуации...

Итак, мне нужно создать «Главную» папку, переместить в нее все файлы и папки проекта, превратить ее в ветку, а затем настроить выпускные ветки на этом уровне?

Да, это, пожалуй, лучшее начало.

Или есть способ преобразовать корневую папку в ветку и разместить под ней ветки релиза?

Я не думаю, что вы можете создать Team Project в ветке, и если бы вы могли, вы бы не хотели, чтобы ваши выпуски были там.

Или мне нужно создать отдельный проект для каждой ветки? Или можно не иметь основной ветки и просто создавать ветки для релизов (я понимаю, что это, вероятно, не лучший вариант — это затруднит слияние)?

Как вы создали эти «ветви релиза»? Вы папки разветвляли?


Это оставит вашу структуру такой:

Team Project
 >Main
 >Release Branches
  >Rel1
  >Rel2

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

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

person DaveShaw    schedule 06.07.2015
comment
Спасибо, Дэйв. Текущий код не имеет веток релизов, поэтому похоже, что я просто перемещу весь существующий код в новую основную папку для основной ветки и создам ветки релизов на основе существующих ярлыков. - person Dave Novelli; 07.07.2015

Я все же считаю, что это законный вопрос, так как я тоже столкнулся с подобной проблемой. Вот что я сделал со своим тестовым проектом «BranchTesting» (а позже и с продуктивным проектом). Самое замечательное в этом то, что он сохраняет историю изменений всех файлов:

  1. Создайте резервную папку на вашем компьютере текущей версии вашего источника. Во время следующих шагов ваш файл в сопоставленной папке будет полностью стерт и переопределен для каждой версии, которую вы хотите записать в ветки Release.
  2. Убедитесь, что все ваши изменения зарегистрированы и что у вас есть описание набора изменений или метка, идентифицирующая самую новую версию (например, «Самая новая версия»).
  3. Создайте 3 папки «Main», «Dev» и «Release» (или Main и Release, если вам не нужна папка Dev) в системе управления версиями.
  4. В выпуске подпапок создайте папки для каждого выпуска (например, 1.0.0 и 1.0.1 или как работает ваше управление выпусками)
  5. Щелкните правой кнопкой мыши командный проект и зарегистрируйте папки.
  6. Щелкните правой кнопкой мыши каждую из папок Release (не корень «Release», просто «1.0.0» и т. д.) -> Ветвление и слияние -> Преобразовать в ветку
  7. Добавьте описание для ветки, установите флажок «Рекурсивно выполнять это преобразование для всех папок, ранее разветвленных из этой папки» и нажмите «Преобразовать». Папки теперь отображаются как ветки. Это не требует регистрации.
  8. Щелкните правой кнопкой мыши свой командный проект -> Дополнительно -> Получить конкретную версию.
  9. Найдите набор изменений или метку версии 1.0.0 и убедитесь, что установлены флажки «Перезаписывать незарегистрированные файлы с возможностью записи» и «Перезаписывать все файлы, даже если локальная версия соответствует указанной версии». Это удалит все папки на диске, которые вы ранее создали!
  10. Щелкните правой кнопкой мыши корень «Release» и получите последнюю версию. Это загрузит папку и подпапки на ваш компьютер.
  11. В Проводнике Windows перейдите в папку проекта и скопируйте все загруженные элементы (обычно sln-файл и папку с исходным кодом) в подпапку Release/1.0.0.
  12. Убедитесь, что вы видите разделенный экран проводника управления версиями (VS) и проводника Windows. Теперь переместите ранее скопированные файлы с помощью перетаскивания в ветку управления версиями 1.0.0.
  13. Щелкните правой кнопкой мыши ветку и зарегистрируйтесь. Отметьте его как «Добавлен исходный код в ветку Release 1.0.0».
  14. Повторите шаги 8-13 для всех выпусков.
  15. Когда все выпуски будут выполнены, щелкните правой кнопкой мыши самую новую ветку выпуска --> Ветвление и слияние --> Объединить
  16. Выберите основную ветвь и выполните слияние без базы. Это гарантирует, что ваша основная ветка получит историю набора изменений из релиза.
  17. Необязательно, щелкните правой кнопкой мыши главную ветку --> Ветвление и слияние --> Ветвь и выберите папку Dev, чтобы создать ветку Dev.

Я пошел немного дальше и создал 2 подпапки в папке Dev, чтобы создать 2 параллельных ветки Dev, но это на ваше усмотрение. Вот как это выглядело в конце: Структура проекта

Вот история набора изменений: Changeset History А вот история файла программы (из тестовой программы): введите здесь описание изображения

Изменить: я понимаю, что imgur не хранит изображения вечно, поэтому здесь с текстом:

Team Project
 > Dev
   > EligibilityEnhancement
     > BranchTesting
   > Ryan
     > BranchTesting
 > Main
   > BranchTesting
 > Release
   > 1.0.0
     > BranchTesting
   > 1.0.1
     > BranchTesting
person Davatar    schedule 03.06.2017