Поделиться через


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

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

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

Предварительные условия

Категория Требования
доступ к проекту Член проекта .
Разрешения — Просмотр кода в частных проектах: по крайней мере Базовый доступ.
— Клонирование или внесение вклада в код в частных проектах: Участник группы безопасности для участников или наличие соответствующих разрешений в проекте.
— Задайте разрешения ветви или репозитория: управление разрешениями для ветви или репозитория.
— Измените ветвь по умолчанию: Измените политики права доступа для репозитория.
— Импорт репозитория: член группы безопасности администраторов проекта или разрешение уровня проекта Git на создание репозитория установлено в «Разрешить» . Дополнительные сведения см. в разделе "Настройка разрешений репозитория Git".
услуги Repos включено.
Инструменты Необязательно. Используйте команды az repos: Azure DevOps CLI.

Примечание.

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

Категория Требования
доступ к проекту Член проекта .
Разрешения — Просмотр кода: по крайней мере базовый доступ.
— Клонирование или участие в коде: член группы безопасности участников или обладатель соответствующих разрешений в проекте.
услуги Repos включено.

Примечание.

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

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

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

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

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

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

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

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

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

::: moniker-end

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

На странице "Файлы" пустого репозитория 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

Функция репозитория импорта появилась в обновлении 1 2017 года. Вы также можете выполнить следующие действия, чтобы вручную импортировать репозиторий в репозиторий Azure DevOps, заменив "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. Создать целевой репозиторий и запишите 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 во время импорта. Если исходный репозиторий не предоставляет эту возможность, служба импорта может не импортировать из данного источника. Этот сбой может произойти при создании запроса на импорт или во время импорта.

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

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

Вопрос. Можно ли использовать учетные данные на основе 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 возникает ошибка.
  • Добавьте исходный репозиторий как удаленный, например "source"
  • Выполните команду 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

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