Compartilhar via


Importar um repositório Git para um projeto

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.

  1. No navegador, entre em sua organização e selecioneArquivos>.

    A captura de tela mostra a exibição de branches.

  2. Na lista suspensa do repositório, selecione Importar repositório.

    A captura de tela mostra a tela Gerenciar repositórios.

  3. Insira a URL de clone do repositório de origem e um nome para o novo repositório Git.

A captura de tela mostra a caixa de diálogo Importar Repositório com a URL de repositório de exemplo disponível publicamente.

  1. 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.

Captura de tela que mostra Importar Repositório em um repositório existente.

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

  1. 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ção bare , 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.git
    
  2. Crie 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.

  3. 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-repo
    

    Aviso

    O uso --mirror substitui 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.

  4. 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-repo
    
  5. Exclua 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.

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 tsv
    
  • Entidade 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

Próximas etapas