Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Это важно
Рассмотрите возможность использования более безопасных маркеров Microsoft Entra по сравнению с более высоким уровнем риска персональных маркеров доступа. Дополнительные сведения см. в разделе "Сокращение использования PAT". Просмотрите рекомендации по проверке подлинности , чтобы выбрать правильный механизм проверки подлинности для ваших потребностей.
В этой статье показано, как импортировать существующий репозиторий Git из GitHub, Bitbucket, GitLab или другого расположения в новый или пустой существующий репозиторий в проекте Azure DevOps.
Предварительные условия
| Категория | Требования |
|---|---|
| доступ к проекту | Член проекта . |
| Разрешения | — Просмотр кода в частных проектах: по крайней мере Базовый доступ. — Клонировать или вносить вклад в код в частных проектах: быть членом группы безопасности "Участники" или иметь соответствующие разрешения в проекте. — Установка разрешений для ветви или репозитория: Управление разрешениями предназначено для управления ветви или репозитория. — Изменение ветви по умолчанию: политики редактирования — это разрешения для репозитория. — Импорт репозитория: член группы безопасности администраторов проекта или разрешение уровня проекта Git на создание репозитория установлено в «Разрешить» . Дополнительные сведения см. в разделе "Настройка разрешений репозитория Git". |
| Services | Repos включено. |
| Инструменты | Необязательно. Используйте az repos команды: Azure DevOps CLI. |
Примечание.
В общедоступных проектах пользователи с заинтересованными лицами доступ к Azure Repos имеют полный доступ к Azure Repos, включая просмотр, клонирование и участие в коде.
| Категория | Требования |
|---|---|
| доступ к проекту | Член проекта . |
| Разрешения | — Просмотр кода: по крайней мере базовый доступ. — Клонирование или участие в коде: член группы безопасности участников или обладатель соответствующих разрешений в проекте. |
| Services | Repos включено. |
Импорт в новый репозиторий
Выполните следующие действия, чтобы импортировать в новый репозиторий:
Примечание.
После завершения импорта репозитория Azure DevOps задает ветвь по умолчанию для импортированного репозитория. Если импортированный репозиторий содержит ветвь с именем main, он устанавливается как ветвь по умолчанию, в противном случае первая ветвь (в алфавитном порядке) импортированного репозитория устанавливается как по умолчанию.
В браузере войдите в вашу организацию и выберите Repos>Files.
В раскрывающемся списке репозитория выберите "Импорт репозитория".
Введите URL-адрес клона исходного репозитория и имя нового репозитория 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 среды значением токена. Чтобы повысить безопасность, используйте маркеры идентификатора Microsoft Entra, если это возможно. Затем запрос импорта включает проверку подлинности. |
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
Клонируйте исходный репозиторий во временную папку на компьютере с помощью
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?
- Можно ли импортировать из предыдущих локальных версий?
- Можно ли использовать учетные данные на основе MSA?
- Можно ли импортировать из TFVC?
- Что делать, если исходный репозиторий содержит объекты Git LFS?
Что делать, если исходный репозиторий защищен двухфакторной аутентификацией?
Ответ. Служба импорта использует REST API для проверки и активации импорта и не может работать непосредственно с репозиториями, для которых требуется двухфакторная проверка подлинности.
Большинство поставщиков размещения Git поддерживают токены аутентификации, которые можно предоставить службе импорта.
Маркеры идентификатора Microsoft Entra (рекомендуется): Маркеры идентификатора Microsoft Entra обеспечивают более высокую безопасность и являются рекомендуемыми способами проверки подлинности. Эти маркеры можно получить с помощью следующих способов:
Azure CLI (для разработки и тестирования):
az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsvСубъект-служба (для рабочих и автоматизированных сценариев):
- Зарегистрируйте приложение в Microsoft Entra ID
- Создание секрета клиента для приложения
- Предоставление приложению соответствующих разрешений в Azure DevOps
- Используйте учетные данные служебной учетной записи для программного получения токенов
Личные маркеры доступа (альтернатива):GitHub и Azure DevOps также поддерживают личные маркеры доступа.
Вопрос. Что делать, если исходный репозиторий не поддерживает multi_ack?
Ответ. Служба импорта использует multi_ack возможности протокола Git во время импорта. Если исходный репозиторий не предоставляет эту возможность, служба импорта может не импортировать из данного источника. Этот сбой может произойти при создании запроса на импорт или во время импорта.
Вопрос. Можно ли импортировать из предыдущих версий?
Ответ. Если исходный репозиторий Git находится в локальной версии ранее 2017 RTM, импорт завершается ошибкой из-за несоответствия контракта между последними версиями Azure DevOps и предыдущими версиями.
Вопрос. Можно ли использовать учетные данные на основе MSA?
Ответ. К сожалению, учетные данные на основе MSA (учетная запись Майкрософт) не работают. Служба импорта использует базовую проверку подлинности для взаимодействия с исходным репозиторием. Если имя пользователя и пароль, которые вы используете, не являются базовой аутентификацией, то аутентификация и импорт будут завершены неудачей. Один из способов проверить, используется ли базовая аутентификация для вашего имени пользователя и пароля, — попробовать клонировать репозиторий с помощью 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 из источника в локальный репозиторий. - Предполагая, что целевой репозиторий Azure DevOps является вашим удаленным объектом.
- Выполните
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