Перенесите только часть репозитория TFS в Git в DevOps Azure

Я новичок в компании, и мой начальник хочет, чтобы я создал надлежащий Git-репозиторий для замены существующего репозитория TFVC. У моей компании есть десятки.NET-решений для различных продуктов, все в одном репо в отдельных папках. Эти решения находятся в дочерних папках общей папки, в которой находится весь репозиторий (с 3 ветками, помеченными как dev, main и master).

У меня есть два вопроса:

1) Как получить только одно из этих решений в одном репозитории Git для перехода в нашу новую ветку Azure DevOps? Какие инструменты я должен использовать в этом случае? Сам Azure DevOps или комбинация командной строки git-tf или git tfs? Хорошо, это было 3 вопроса в одном.

2) TFS имеет три ветви: dev, main и master (которые являются родителями папок решения). Как я могу получить только одну из этих веток, которая будет перенесена в Git (т.е. я просто хочу, чтобы Мастер был перенесен)? Должен ли я включить все ветви?

Итак, 2 группы вопросов, но на самом деле это 5 загруженных вопросов. Я прошу прощения, но это сложная ситуация. Заранее спасибо.

2 ответа

Решение

Я пишу это с предположением о вашей стратегии:

Ответы ниже имеют вкус, исходящий из предположения, что вы хотите распространять методологию repo-per-sln. "Что лучше для нас - быстро собрать все в одном git-репо и позже разделить или перейти к git по частям?" Это реальный вопрос. Я был только частью 1 миграции, которая сделала всю работу, и усилия по координации были значительными, потому что в пятницу люди пошли домой, используя TFVC, но пришли в понедельник, используя Git.

Я поднимаю это, потому что вы упоминаете, что ваш босс

хочет, чтобы [вы] создали надлежащий Git-репозиторий для замены существующего репозитория TFVC

Использование "правильного Git-репо" (единственного числа) может изменить способ, которым вам нужно что-то понимать, особенно на фронте CI/CD AzDO.

На (моя версия) ответы:

Как мне получить только одно из этих решений в одном Git-репозитории

Если решения действительно раздельные и у вас нет зависимостей от других решений, создайте каталог с именем, которое вам нравится для вашего репозитория, и дайте ему хорошую процедуру копирования и вставки. Затем вы можете запустить там git-репо (не забудьте включить хороший файл.gitignore для проектов VS) и зафиксировать начальные изменения. Затем вы можете настроить репозиторий проекта AzDO в качестве пульта для отправки.

Если вы новичок в Git, вы можете инициировать репо в AzDO и клонировать его локально, а не вручную устанавливать AzDO в качестве удаленного для репо, созданного вами локально. Тогда вы все еще можете использовать молоток (читай: копировать / вставить), чтобы вставить свой код TFVC в новое git-репо.

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

Какие инструменты я должен использовать в этом случае?

Я склонен использовать Git Bash для большинства подобных вещей, но "каждому свое". Как упомянул @DanielMann, ваш инструмент будет определяться тем, что вам действительно нужно с точки зрения истории. До сих пор я придерживался его мнения во всех моих миграциях. "Пусть прошлое будет прошлым". Эта последняя миграция также предпочла отказаться от локальных конфигураций сборки Team City в пользу чистой реализации AzDO для SC >> CI >> CD.

2) TFS имеет три ветви: dev, main и master (которые являются родителями папок решения). Как я могу получить только одну из этих веток, которая будет перенесена в Git (т.е. я просто хочу, чтобы Мастер был перенесен)? Должен ли я включить все ветви?

Я собираюсь изменить порядок этих 2 вопросов:

Должен ли я включить все ветви?

Нет. TFVC отслеживает файлы, поэтому у каждой ветви есть свой фрагмент файловой системы.

2) TFS имеет три ветви: dev, main и master (которые являются родителями папок решения). Как я могу получить только одну из этих веток, которая будет перенесена в Git (т.е. я просто хочу, чтобы Мастер был перенесен)?

Снова используйте молоток. Вы должны создать новую область вашей локальной файловой системы для представления репозитория. Например: мой контейнер репо c:/src/ тогда у меня есть каталоги, представляющие каждый отдельный репо c:src/r1/c:src/r2/ ЭСТ. (примечание: мои имена намного лучше, чем в примере). Как только у вас это получится, получите последнюю информацию из нужной ветки TFVC и забейте.

Возможная головная боль

Убедитесь, что вы можете заставить других разработчиков прекратить вносить изменения в код, который вы переносите. Если вы также настраиваете конвейер AzDO CI/CD, вы можете в конечном итоге внести изменения в проекты, чтобы это работало. Если разработчики все еще меняют исходный код, над которым вы работаете, вы захотите повторить ваши изменения в TFVC, чтобы они могли писать поверх них, иначе вы будете в аду слияния, когда попытаетесь вбить новые изменения обратно в git.

Пункт 2) облегчить миграцию.

Так что это должно быть сделано без особых проблем с помощью команды, аналогичной:

git tfs clone https://tfs.codeplex.com:443/tfs/Collection $/project/trunk --branches=none

См. https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md#fetch-all-the-history-for-just-the-main-branch-ignoring-all-the-other-branches

Другие вопросы по тегам