Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Este artigo mostra como importar um Repositório do Git existente do GitHub, Bitbucket, GitLab ou de outro local para um repositório existente novo ou vazio em seu projeto do Azure DevOps.
Pré-requisitos
| Categoria | Requirements |
|---|---|
| Acesso ao Projeto | Membro de um projeto. |
| Permissões | - Exibir código em projetos privados: pelo menos acesso básico . - Clonar ou contribuir para o código em projetos privados: membro do grupo de segurança Colaboradores ou permissões correspondentes no projeto. - Definir permissões de branch ou repositório: gerenciar permissões de permissões para o branch ou repositório. - Alterar o branch padrão: editar permissões de políticas para o repositório. - Importar um repositório: membro do grupo de segurança Administradores do Projeto ou da permissão Criar repositório no nível do projeto do Git definida como Permitir. Para obter mais informações, consulte Definir permissões do Repositório do Git. |
| Serviços | Repositórios habilitados. |
| Ferramentas | Opcional. Use comandos az repos : CLI do Azure DevOps. |
Observação
Em projetos públicos, os usuários com acesso ao Stakeholder têm acesso total ao Azure Repos, incluindo exibição, clonagem e contribuição para o código.
| Categoria | Requirements |
|---|---|
| Acesso ao Projeto | Membro de um projeto. |
| Permissões | - Exibir código: pelo menos acesso básico . - Clonar ou contribuir com o código: membro do grupo de segurança Colaboradores ou permissões correspondentes no projeto. |
| Serviços | Repositórios habilitados. |
Importar para um novo repositório
Execute as seguintes etapas para importar para um novo repositório:
Observação
Quando a importação do repositório é concluída, o Azure DevOps define o branch Padrão para esse repositório importado. Se o repositório importado contiver um branch nomeado main, ele será definido como o branch padrão, caso contrário, o primeiro branch (em ordem alfabética) do repositório importado será definido como Padrão.
No navegador, entre em sua organização e selecioneArquivos>.
Na lista suspensa do repositório, selecione Importar repositório.
Insira a URL de clone do repositório de origem e um nome para o novo repositório Git.
- Selecione Importar um repositório.
O repositório é importado.
Importar para um repositório vazio existente
Na página Arquivos do Repositório do Git vazio, selecione Importar e insira a URL de clone. Forneça credenciais se o repositório de origem exigir autenticação.
Observação
O recurso de importação desabilita a vinculação automatizada para itens de trabalho mencionados em um comentário de confirmação, pois as IDs do item de trabalho no projeto de destino podem não ser iguais às do projeto de origem. A vinculação dos para itens de trabalho mencionados em um commit pode ser habilitada novamente navegando até Configurações, Controle de Versão, selecionando seu repositório e escolhendo Opções. Para obter mais informações sobre como vincular commits com itens de trabalho, consulte Vincular itens de trabalho a commits
Importar manualmente um repositório usando a CLI az repos
Você pode usar az repos import para importar um repositório para seu projeto do Azure DevOps.
Primeiro, você deve criar o repositório no Azure DevOps antes de importar um Repositório do Git. Além disso, o repositório criado deve estar vazio. Para criar um repositório, consulte Criar seu Repositório do Git no Azure Repos.
az repos import create --git-source-url
[--detect {false, true}]
[--git-service-endpoint-id]
[--org]
[--project]
[--repository]
[--requires-authorization]
[--subscription]
[--user-name]
Parâmetros
| Parâmetro | Descrição |
|---|---|
git-source-url |
Obrigatórios. URL do Repositório do Git de origem a ser importado. |
detect |
Opcional. Detecte automaticamente a organização. Valores aceitos: false, true. |
git-service-endpoint-id |
Opcional. Ponto de extremidade de serviço para conexão com ponto de extremidade externo. |
org, organization |
URL da organização do Azure DevOps. Você pode configurar a organização padrão usando az devops configure -d organization=<ORG_URL>.
Obrigatório se não estiver configurado como padrão ou selecionado por meio da configuração Git. Exemplo: https://dev.azure.com/MyOrganizationName/. |
project, p |
Nome ou ID do projeto. Você pode configurar o grupo padrão usando az devops configure -d project=<NAME_OR_ID>.
Obrigatório se não estiver configurado como padrão ou selecionado por meio da configuração Git. |
repository |
Nome ou ID do repositório no qual será criada a solicitação de importação. |
requires-authorization |
Sinalizador para indicar se o Repositório do Git de origem é privado. Se você precisar de autenticação, gere um token de autenticação no repositório de origem e defina a variável de ambiente AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT como o valor do token. Para maior segurança, recomendamos usar tokens de ID do Microsoft Entra quando possível. Em seguida, a solicitação de importação inclui autenticação. |
subscription |
Nome ou ID da assinatura. Você pode configurar a assinatura padrão usando az account set -s <NAME_OR_ID>. |
user-name |
Nome de usuário a ser especificado quando o Repositório do Git for privado. |
Exemplo
O comando a seguir importa o repositório público fabrikam-open-source para o Repositório do Git vazio fabrikam-open-source na configuração az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber"padrão .
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"
}
Importar manualmente um repositório usando a CLI git
Clone o repositório de origem em uma pasta temporária no computador usando a opção
bare, conforme mostrado no exemplo de linha de comando a seguir e depois navegue até a pasta do repositório. Ao clonar usando a opçãobare, o nome da pasta inclui o sufixo.git. Neste exemplo,https://github.com/contoso/old-contoso-repo.gité o repositório de origem a ser importado manualmente.git clone --bare https://github.com/contoso/old-contoso-repo.git cd old-contoso-repo.gitCrie um repositório de destino e anote a URL do clone. Neste exemplo,
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoé a URL do novo repositório de destino.Execute o comando a seguir para copiar o repositório de origem para o repositório de destino.
git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoAviso
O uso
--mirrorsubstitui todos os branches no repositório de destino, o que inclui a exclusão de branches que não estão no repositório de origem.Se o repositório de origem tiver objetos LFS, busque-os e copie-os do repositório de origem para o repositório de destino.
git lfs fetch origin --all git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoExclua a pasta temporária executando os comandos a seguir.
cd .. rm -rf old-contoso-repo.git
Perguntas frequentes (FAQs)
Embora as importações sejam mais bem-sucedidas, as condições a seguir podem causar problemas.
- E se meu repositório Source estiver por trás da autenticação de dois fatores?
- E se meu repositório de origem não der suporte a multi_ack?
- Posso importar de versões locais anteriores?
- Posso usar credenciais baseadas em MSA?
- Posso importar do TFVC?
- E se meu repositório de origem contiver objetos Git LFS?
P: E se meu repositório de origem estiver por trás da autenticação de dois fatores?
R: O serviço de importação usa APIs REST para validar e disparar a importação e não pode funcionar diretamente com repositórios que exigem autenticação de dois fatores.
A maioria dos provedores de hospedagem git dá suporte a tokens de autenticação que podem ser fornecidos para o serviço de importação:
Tokens de ID do Microsoft Entra (recomendado): Os tokens de ID do Microsoft Entra fornecem melhor segurança e são o método de autenticação recomendado. Você pode obter esses tokens por meio de:
CLI do Azure (para desenvolvimento/teste):
az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsvEntidade de Serviço (para cenários de produção/automatizados):
- Registre um aplicativo no Microsoft Entra ID
- Criar um segredo do cliente para o aplicativo
- Conceder permissões apropriadas ao aplicativo no Azure DevOps
- Usar as credenciais da entidade de serviço para obter tokens programaticamente
Tokens de Acesso Pessoal (alternativa):o GitHub e o Azure DevOps também dão suporte a tokens de acesso pessoal.
P: E se meu repositório de origem não der suporte a multi_ack?
R: O serviço de importação usa a funcionalidade multi_ack do protocolo Git durante a importação. Se o repositório de origem não fornecer essa funcionalidade, o serviço de importação poderá falhar ao importar da fonte fornecida. Essa falha pode ocorrer ao criar uma solicitação de importação ou enquanto a importação estiver em andamento.
P: Posso importar de versões anteriores?
R: Se o repositório Git de origem estiver em uma versão local anterior ao RTM 2017, a importação falhará devido a uma incompatibilidade de contrato entre o Azure DevOps mais recente e as versões anteriores.
P: Posso usar credenciais baseadas em MSA?
R: Infelizmente, as credenciais baseadas em MSA (Conta da Microsoft) não funcionam. O serviço de importação depende da autenticação básica para se comunicar com o repositório de origem. Se o nome de usuário e a senha que você está usando não forem básicos, a autenticação e a importação falharão. Uma maneira de verificar se o nome de usuário/senha que você está usando é tentar usar o Git para clonar seu repositório usando o seguinte formato:
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
P: Posso importar do TFVC?
R: Você pode migrar o código de um repositório TFVC existente para um novo repositório Git na mesma conta. Embora a migração para o Git tenha muitos benefícios, é um processo envolvido para grandes repositórios E equipes do TFVC. Sistemas de controle de versão centralizados, como o TFVC, se comportam de forma diferente do Git de maneiras fundamentais. A opção envolve muito mais do que aprender novos comandos. É uma mudança disruptiva que requer um planejamento cuidadoso. Para obter mais informações, consulte Importar do TFVC para o Git.
P: E se meu repositório de origem contiver objetos Git LFS?
R: A importação do Git não importa objetos git LFS.
Os objetos LFS podem ser movidos usando as seguintes etapas:
- Importe o repositório usando o recurso de importação de repositório para o Azure DevOps. Essa ação copia todos os objetos Git da origem para o Azure DevOps, que também importa os ponteiros LFS que são objetos Git, mas não os arquivos LFS
Para mover os arquivos LFS, você precisa de Git.exe e do cliente LFS na mesma caixa e acesso ao repositório de origem e ao repositório de destino
- Clone o repositório importado do Azure DevOps para o sistema local. O clone funciona, mas falha ao executar o check-out de arquivos LFS
- Adicionar o repositório de origem como remoto, por exemplo, "origem"
- Executar
git lfs fetch source --all, que traz todos os arquivos LFS da origem para o repositório local - Supondo que o repositório VSTS de destino seja seu "destino" remoto
- Execute
git lfs push target --all
P: Posso importar atualizações se a origem for alterada mais tarde?
R: O serviço de importação é para importar inicialmente um repositório inteiro. Para espelhar alterações posteriores, você precisa de um clone local do repositório com os controles remotos definidos como origem e destino.
Você pode sincronizar as alterações usando os comandos a seguir.
Tratamos a importação do Azure Repos como origin e o repositório original como 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