Импорт репозитория Git

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

В этой статье показано, как импортировать существующий репозиторий Git из GitHub, Bitbucket, GitLab или другого расположения в новый или пустой существующий репозиторий в проекте Azure DevOps.

Необходимые компоненты

  • Организация в Azure DevOps. Если у вас нет, вы можете зарегистрироваться бесплатно. Каждая организация включает бесплатные, неограниченные частные репозитории Git.
  • Чтобы создать или импортировать репозиторий, необходимо быть членом группы безопасности Project Администратор istrators или иметь разрешение на создание репозитория на уровне проекта Git в качестве allow. Дополнительные сведения см. в разделе "Настройка разрешений репозитория Git".
  • Чтобы использовать функцию репозитория импорта Azure DevOps, необходимо использовать TFS 2017 с обновлением 1 или выше.
  • Чтобы импортировать репозиторий с помощью RTM tFS 2017 или более ранней версии, см. статью "Вручную импорт репозитория с помощью интерфейса командной строки Git".
  • Если вы хотите использовать команды az repos , выполните действия, описанные в статье "Начало работы с Azure DevOps CLI".
  • Организация в Azure DevOps. Если у вас нет, вы можете зарегистрироваться бесплатно. Каждая организация включает бесплатные, неограниченные частные репозитории Git.
  • Чтобы создать или импортировать репозиторий, необходимо быть членом группы безопасности Project Администратор istrators или иметь разрешение на создание репозитория на уровне проекта Git в качестве allow. Дополнительные сведения см. в разделе "Настройка разрешений репозитория Git".
  • Чтобы использовать функцию репозитория импорта Azure DevOps, необходимо использовать TFS 2017 с обновлением 1 или выше.
  • Чтобы импортировать репозиторий с помощью RTM tFS 2017 или более ранней версии, см. статью "Вручную импорт репозитория с помощью интерфейса командной строки Git".

Примечание.

После завершения импорта репозитория Azure DevOps задает ветвь по умолчанию для импортированного репозитория. Если импортированный репозиторий содержит ветвь с именем master, она устанавливается как ветвь по умолчанию, в противном случае первая ветвь (в алфавитном порядке) импортированного репозитория имеет значение Default.

Импорт в новый репозиторий

  1. Выберите Repos, Files.

    Просмотр ветвей

  2. В раскрывающемся списке репозитория выберите "Импорт репозитория".

    Управление репозиториями

  3. Если исходный репозиторий является общедоступным, просто введите URL-адрес клона исходного репозитория и имя нового репозитория Git.

    Если исходный репозиторий является частным, но к ней можно получить доступ с помощью базовой проверки подлинности (имя пользователя- пароль, личный маркер доступа и т. д.), выберите " Требовать авторизацию " и введите учетные данные. Проверка подлинности SSH не поддерживается, но вы можете вручную импортировать репозиторий, использующий проверку подлинности SSH, выполнив действия, описанные в руководстве по импорту репозитория с помощью интерфейса командной строки Git.

    Диалоговое окно импорта репозитория

Импорт в существующий пустой репозиторий

На странице "Файлы" пустого репозитория Git выберите "Импорт" и введите URL-адрес клонирования. Если для исходного репозитория требуется проверка подлинности, необходимо указать учетные данные.

Импорт репозитория в существующий репозиторий

Примечание.

Функция импорта отключает автоматическое связывание рабочих элементов, упоминание в комментарии фиксации, так как идентификаторы рабочих элементов в целевом проекте могут не совпадать с идентификаторами исходного проекта. Автоматическое связывание рабочих элементов, упоминание в фиксации, можно повторно включить, перейдя к Параметры, управлению версиями, выбору репозитория и выбору параметров. Дополнительные сведения о связывании фиксаций с рабочими элементами см. в разделе "Связывание рабочих элементов с фиксациями"

Импорт репозитория вручную с помощью CLI az repos

Вы можете использовать az repos import для импорта репозитория в проект Azure DevOps.

Примечание.

Прежде чем импортировать репозиторий Git, необходимо сначала создать репозиторий в Azure DevOps. Кроме того, создаваемый репозиторий должен быть пустым. Сведения о создании репозитория см. в статье "Создание репозитория Git" в Azure Repos.

az repos import create --git-source-url
                       [--detect {false, true}]
                       [--git-service-endpoint-id]
                       [--org]
                       [--project]
                       [--repository]
                       [--requires-authorization]
                       [--subscription]
                       [--user-name]

Параметры

Параметр Описание
git-source-url Обязательное. URL-адрес исходного репозитория Git для импорта.
detect Необязательно. Автоматическое обнаружение организации. Допустимые значения: false, true.
git-service-endpoint-id Необязательно. Конечная точка службы для подключения к внешней конечной точке.
org, organization URL-адрес организации Azure DevOps. Вы можете настроить организацию по умолчанию с помощью az devops configure -d organization=<ORG_URL>. Требуется, если не настроено как по умолчанию или выбрано с помощью конфигурации Git. Пример: https://dev.azure.com/MyOrganizationName/.
project, p Имя или идентификатор проекта. Вы можете настроить проект по умолчанию с помощью az devops configure -d project=<NAME_OR_ID>. Требуется, если не настроено как по умолчанию или выбрано с помощью конфигурации Git.
repository Имя или идентификатор репозитория для создания запроса на импорт.
requires-authorization Пометка, чтобы указать, является ли исходный репозиторий Git частным. Если требуется проверка подлинности, создайте маркер проверки подлинности в исходном репозитории и задайте переменную AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT среды значением маркера. Затем запрос импорта будет включать проверку подлинности.
subscription Имя или идентификатор подписки Подписку по умолчанию можно настроить с помощью az account set -s <NAME_OR_ID>.
user-name Имя пользователя, указывая, когда репозиторий Git является частным.

Пример

Следующая команда импортирует общедоступный репозиторий fabrikam-open-source в пустой репозиторий Git fabrikam-open-source для конфигурации az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"по умолчанию.

az repos import create --git-source-url https://github.com/fabrikamprime/fabrikam-open-source --repository fabrikam-open-source
{
  "detailedStatus": {
    "allSteps": [
      "Processing request",
      "Analyzing repository objects",
      "Storing objects",
      "Storing index file",
      "Updating references",
      "Import completed successfully"
    ],
    "currentStep": 6,
    "errorMessage": null
  },
  "importRequestId": 8,
  "parameters": {
    "deleteServiceEndpointAfterImportIsDone": null,
    "gitSource": {
      "overwrite": false,
      "url": "https://github.com/fabrikamprime/fabrikam-open-source"
    },
    "serviceEndpointId": null,
    "tfvcSource": null
  },
  "repository": {
    "defaultBranch": null,
    "id": "0f6919cd-a4db-4f34-a73f-2354114a66c4",
    "isDisabled": false,
    "isFork": null,
    "name": "new-empty-repo",
    "parentRepository": null,
    "project": {
      "abbreviation": null,
      "defaultTeamImageUrl": null,
      "description": "Guidance and source control to foster a vibrant ecosystem for Fabrikam Fiber applications and extensions.",
      "id": "56af920d-393b-4236-9a07-24439ccaa85c",
      "lastUpdateTime": "2021-05-24T21:52:14.95Z",
      "name": "Fabrikam Fiber",
      "revision": 438023732,
      "state": "wellFormed",
      "url": "https://dev.azure.com/fabrikamprime/_apis/projects/56af920d-393b-4236-9a07-24439ccaa85c",
      "visibility": "private"
    },
    "remoteUrl": "https://fabrikamprime@dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source",
    "size": 12477,
    "sshUrl": "git@ssh.dev.azure.com:v3/kelliott/Fabrikam%20Fiber/new-empty-repo",
    "url": "https://dev.azure.com/fabrikamprime/56af920d-393b-4236-9a07-24439ccaa85c/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4",
    "validRemoteUrls": null,
    "webUrl": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source"
  },
  "status": "completed",
  "url": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4/importRequests/8"
}

Импорт репозитория вручную с помощью Git CLI

Функция репозитория импорта появилась в TFS 2017 с обновлением 1. Если вы используете TFS 2017 RTM или более ранних версий, выполните следующие действия, чтобы вручную импортировать репозиторий в TFS. Вы также можете выполнить эти действия, чтобы вручную импортировать репозиторий в репозиторий Azure DevOps Services, заменив TFS на Azure Repos в следующих шагах.

  1. Клонируйте исходный репозиторий во временную папку на компьютере с помощью bare параметра, как показано в следующем примере командной строки, а затем перейдите к папке репозитория. При клонирование с помощью bare параметра имя папки включает .git суффикс. В этом примере используется исходный репозиторий для https://github.com/contoso/old-contoso-repo.git импорта вручную.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Создайте целевой репозиторий с помощью TFS 2017 RTM и запишите URL-адрес клонирования. В этом примере https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo используется URL-адрес нового целевого репозитория.

  3. Выполните следующую команду, чтобы скопировать исходный репозиторий в целевой репозиторий.

    git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    

    Предупреждение

    Использование --mirror перезаписывает все ветви в целевом репозитории, включающее удаление ветвей, не входящих в исходное репозиторие.

  4. Если исходный репозиторий содержит объекты LFS, получите их и скопируйте их из исходного репозитория в целевой репозиторий.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Удалите временную папку, выполнив следующие команды.

    cd ..
    rm -rf old-contoso-repo.git
    

Часто задаваемые вопросы

Хотя большая часть времени импорта выполнена успешно, следующие условия могут вызвать проблемы.

Что делать, если исходный репозиторий находится за двухфакторной проверкой подлинности?

Служба импорта использует REST API для проверки и активации импорта и не может работать непосредственно с репозиториями, требующими двухфакторной проверки подлинности. Большинство поставщиков размещения Git, таких как GitHub и Azure DevOps Services , поддерживают личные маркеры, которые можно предоставить службе импорта.

Что делать, если исходный репозиторий не поддерживает multi_ack?

Служба импорта использует multi_ack возможности протокола Git во время импорта. Если исходный репозиторий не предоставляет эту возможность, служба импорта может не импортировать из данного источника. Этот сбой может произойти при создании запроса на импорт или во время импорта.

Можно ли импортировать из предыдущих версий Team Foundation Server?

Если исходный репозиторий Git находится в версии TFS до TFS 2017 RTM, импорт завершится ошибкой. Это происходит из-за несоответствия контракта между последними версиями Azure DevOps Services и TFS до 2017 RTM.

Можно ли использовать учетные данные на основе MSA?

К сожалению, учетные данные на основе MSA (учетная запись Майкрософт, ранее — Live ID) не будут работать. Служба импорта использует базовую проверку подлинности для взаимодействия с исходным репозиторием. Если используется имя пользователя или пароль, то проверка подлинности завершится ошибкой, и импорт завершится ошибкой. Один из способов проверка, если используемое имя пользователя или пароль являются базовыми аутентификацией или нет, попробуйте использовать Git для клонирования репозитория с помощью приведенного ниже формата.

git clone https://<<username>>:<<password>>@<<remaining clone Url>>

Можно ли импортировать из TFVC?

Вы можете перенести код из существующего репозитория TFVC в новый репозиторий Git в той же учетной записи. При миграции на Git имеется множество преимуществ, он является задействованным процессом для крупных репозиториев TFVC и команд. Централизованные системы управления версиями, такие как TFVC, ведут себя по-разному, чем Git. Переключение включает гораздо больше, чем обучение новых команд. Это разрушительные изменения, требующие тщательного планирования. Дополнительные сведения см. в разделе "Импорт из TFVC в Git".

Что делать, если исходный репозиторий содержит объекты Git LFS?

Импорт Git не импортирует объекты Git LFS.

Объекты LFS можно переместить, выполнив следующие действия.

  • Импортируйте репозиторий с помощью функции репозитория импорта в Azure DevOps. Это скопирует все объекты Git из источника в Azure DevOps (это также импортирует указатели LFS, которые являются объектами Git, но не файлами LFS).

Для перемещения по файлам LFS (вам потребуется как Git.exe, так и клиент LFS в одном окне и доступ к исходному репозиторию и целевому репозиторию).

  • Клонировать импортированный репозиторий из Azure DevOps в локальную систему, клон будет работать, но при выполнении проверка выхода файлов LFS из LFS не удастся
  • Добавьте исходный репозиторий как удаленный (скажите "источник")
  • Выполните git lfs fetch source --all (это приведет ко всем файлам LFS из источника в локальный репозиторий)
  • Предполагая, что целевой репозиторий VSTS является вашим удаленным объектом
  • Выполнить git lfs push target --all

Можно ли импортировать обновления, если исходные изменения изменяются позже?

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

Вы можете синхронизировать изменения с помощью следующих команд. Мы рассмотрим импорт Azure Repos как origin и исходный репозиторий upstream.

git clone --bare <Azure-Repos-clone-URL>.git
cd <name-of-repo>
git remote add --mirror=fetch upstream <original-repo-URL>
git fetch upstream --tags
git push origin --all

Следующие шаги