Partilhar via


Importar um repositório Git para um projeto

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

Este artigo mostra como importar um repositório Git existente do GitHub, Bitbucket, GitLab ou outro local para um repositório existente novo ou vazio em seu projeto de DevOps do Azure.

Pré-requisitos

Categoria Requerimentos
Acesso ao projeto Membro de um projeto .
Permissões - Ver código em projetos privados: Acesso pelo menos Básico.
- Clone ou contribua para o código em projetos privados: Membro do grupo de segurança Contributors ou permissões correspondentes no projeto.
- Definir permissões de ramo ou repositório: Gerir permissões para o ramo ou repositório.
- Alterar ramificação padrão: Editar políticas e permissões para o repositório.
- Importar um repositório: Membro do grupo de segurança Administradores de Projeto ou com permissão de Criar repositório ao nível do projeto Git definida como Permitir. Para obter mais informações, consulte Definir permissões do repositório Git.
Serviços Repos ativado.
Ferramentas Opcional. Utilize os comandos az repos: Azure DevOps CLI.

Nota

Em projetos públicos, os usuários com acesso Partes Interessadas têm acesso total aos repositórios do Azure, incluindo visualização, clonagem e contribuição para o código.

Categoria Requerimentos
Acesso ao projeto Membro de um projeto .
Permissões - Visualização de código: Pelo menos acesso básico.
- Clone ou contribua para o código: Membro do grupo de segurança Contributors ou com permissões correspondentes no projeto.
Serviços Repos ativado.

Importar para um novo repositório

Execute as seguintes etapas para importar para um novo repositório:

Nota

Quando a importação do repositório é concluída, o Azure DevOps define a ramificação Padrão para esse repositório importado. Se o repositório importado contiver uma ramificação chamada main, ela será definida como a ramificação padrão, caso contrário, a primeira ramificação (em ordem alfabética) do repositório importado será definida como Padrão.

  1. No browser, inicie sessão na sua organização e selecione Repos>Files.

    A captura de tela mostra a exibição de ramificações.

  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 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 Git vazio, selecione Importar e insira a URL de clonagem. Forneça credenciais se o repositório de origem exigir autenticação.

A captura de tela mostra a importação de um repositório para dentro de um repositório existente.

Nota

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 de item de trabalho no projeto de destino podem não ser as mesmas do projeto de origem. A vinculação automática para itens de trabalho mencionados em uma confirmação pode ser reativada navegando até Configurações, Controle de Versão, selecionando seu repositório e escolhendo Opções. Para obter mais informações sobre como vincular confirmações a itens de trabalho, consulte Vincular itens de trabalho a confirmações

Importar manualmente um repositório com a CLI az repos

Você pode usar az repos import para importar um repositório para seu projeto do Azure DevOps.

Você deve primeiro criar o repositório no Azure DevOps antes de poder importar um repositório Git. Além disso, o repositório criado deve estar vazio. Para criar um repositório, consulte Criar seu repositório 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ório. URL do repositório git de origem a ser importado.
detect Opcional. Detete automaticamente a organização. Valores aceites: 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>. Necessário se não configurado como padrão ou captado via git config. Exemplo: https://dev.azure.com/MyOrganizationName/.
project, p Nome ou ID do projeto. Você pode configurar o projeto padrão usando az devops configure -d project=<NAME_OR_ID>. Necessário se não configurado como padrão ou captado via git config.
repository Nome ou ID do repositório no qual criar a solicitação de importação.
requires-authorization Sinalizador para indicar se o repositório 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 AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT de ambiente como o valor do token. Para maior segurança, recomendamos o uso de tokens de ID do Microsoft Entra quando possível. Em seguida, a solicitação de importação inclui autenticação.
subscription o nome ou o ID da subscrição. Você pode configurar a assinatura padrão usando az account set -s <NAME_OR_ID>o .
user-name Nome de usuário para especificar quando o repositório git é privado.

Exemplo

O comando a seguir importa o repositório público fabrikam-open-source para o repositório Git vazio fabrikam-open-source para a 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 com a CLI git

  1. Clone o repositório de origem em uma pasta temporária no seu computador usando a bare opção, conforme mostrado no exemplo de linha de comando a seguir, e navegue até a pasta do repositório. Ao clonar usando a bare opção, 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 para o novo repositório de destino.

  3. Execute o seguinte comando 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 todas as ramificações no repositório de destino, o que inclui a exclusão de quaisquer ramificações que não estejam 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 seguintes comandos.

    cd ..
    rm -rf old-contoso-repo.git
    

Perguntas mais frequentes (FAQ)

Embora as importações sejam, na maioria das vezes, bem-sucedidas, as seguintes condições podem causar problemas.

P: E se meu repositório de origem estiver atrás da autenticação de dois fatores?

R: O serviço de importação usa APIs REST para validar e acionar a importação e não pode trabalhar diretamente com repositórios que exigem autenticação de dois fatores.

A maioria dos provedores de hospedagem Git suporta tokens de autenticação que podem ser fornecidos para o serviço de importação:

Tokens de ID do Microsoft Entra (recomendado): Os tokens Microsoft Entra ID fornecem melhor segurança e são o método de autenticação recomendado. Você pode obter esses tokens através de:

  • CLI do Azure (para desenvolvimento/teste):

    az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
    
  • Service Principal (para cenários de produção/automatizados):

    • Registar uma aplicação no Microsoft Entra ID
    • Criar um segredo do cliente para o aplicativo
    • Conceder permissões apropriadas ao aplicativo no Azure DevOps
    • Use as credenciais da entidade de serviço para obter tokens programaticamente

Tokens de Acesso Pessoal (alternativo):o GitHub e o Azure DevOps também oferecem suporte a tokens de acesso pessoal.

P: E se o meu repositório de origem não suportar multi_ack?

R: O serviço de importação usa a capacidade de multi_ack do protocolo Git durante a importação. Se o repositório de origem não fornecer esse recurso, o serviço de importação poderá falhar ao importar da fonte fornecida. Essa falha pode acontecer 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 autenticação básica, a autenticação e a importação falharão. Uma maneira de verificar se o nome de usuário / senha que você está usando são autenticação básica é 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 dentro da mesma conta. Embora a migração para o Git tenha muitos benefícios, é um processo envolvido para grandes repositórios e equipes de TFVC. Sistemas de controle de versão centralizados, como o TFVC, se comportam de maneiras diferentes do Git de maneiras fundamentais. O switch 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 do Git LFS.

Os objetos LFS podem ser movidos usando as seguintes etapas:

  • Importe o repositório usando o recurso de repositório de importação 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 do cliente Git.exe e do 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 durante a execução do checkout dos arquivos LFS.
  • Adicione o repositório de origem como remoto, por exemplo, "source"
  • Executar git lfs fetch source --all, que traz todos os arquivos LFS da origem para o repositório local
  • Supondo que o repositório de destino VSTS seja o seu remoto de destino
  • Executar git lfs push target --all

P: Posso importar atualizações se a fonte mudar 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 controles remotos definidos para origem e destino.

Você pode sincronizar as alterações usando os seguintes comandos. 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óximos passos