Перенесите только часть репозитория TFS в Git в DevOps Azure - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в компании, и мой начальник хочет, чтобы я создал надлежащий 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 ]

0 голосов
/ 22 февраля 2019

Пункт 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

0 голосов
/ 21 февраля 2019

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

Ответы, приведенные ниже, имеют изюминку, если предположить, что вы хотите распространять методологию 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 (т.е. я просто хочу, чтобы Мастер был перенесен)?Нужно ли включать все ветви?

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

Нужно ли включать все ветви?

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

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

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

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

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

...