Импорт репозитория 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
, он устанавливается как ветвь по умолчанию, в противном случае первая ветвь (в алфавитном порядке) импортированного репозитория устанавливается как по умолчанию.
Импорт в новый репозиторий
Выберите Repos, Files.
В раскрывающемся списке репозитория выберите "Импорт репозитория".
Если исходный репозиторий является общедоступным, просто введите 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" в них.
Клонируйте исходный репозиторий во временную папку на компьютере с помощью
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
Создать целевой репозиторий и запишите URL-адрес клонирования. В этом примере
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
используется URL-адрес нового целевого репозитория.Выполните следующую команду, чтобы скопировать исходный репозиторий в целевой репозиторий.
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
Предупреждение
Использование
--mirror
приводит к перезаписи всех ветвей в целевом репозитории, включая удаление ветвей, не содержащихся в исходном репозитории.Если исходный репозиторий содержит объекты LFS, получите их и скопируйте их из исходного репозитория в целевой репозиторий.
git lfs fetch origin --all git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
Удалите временную папку, выполнив следующие команды.
cd .. rm -rf old-contoso-repo.git
Часто задаваемые вопросы
Хотя импорт чаще всего успешно выполнен, следующие условия могут вызвать проблемы.
- Что делать, если исходный репозиторий защищён двухфакторной аутентификацией?
- Что делать, если исходный репозиторий не поддерживает multi_ack?
- Можно ли импортировать из предыдущих версий Team Foundation Server?
- Можно ли использовать учетные данные на основе MSA?
- Можно ли импортировать из TFVC?
- Что делать, если исходный репозиторий содержит объекты Git LFS?
Что делать, если исходный репозиторий защищен двухфакторной аутентификацией?
Ответ. Служба импорта использует 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