Importar um Repositório do Git

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

  • Uma organização no Azure DevOps. Se não tiver uma, poderá criar uma gratuitamente. Cada organização inclui repositórios Git privados, gratuitos e ilimitados.
  • Para criar ou importar um repositório, você deve ser membro do grupo de segurança Administradores do Projeto ou ter a permissão Criar repositório no nível do projeto do Git definida como Permitir. Para saber mais, confira Definir permissões de Repositório do Git.
  • Para usar o recurso de repositório de Importação do Azure DevOps, você deve ter a Atualização 1 ou superior do TFS 2017.
  • Para importar um repositório usando o TFS 2017 RTM ou anterior, confira Importar manualmente um repositório usando a CLI do Git.
  • Se você quiser usar comandos az repos , siga as etapas em Introdução à CLI do Azure DevOps.
  • Uma organização no Azure DevOps. Se não tiver uma, poderá criar uma gratuitamente. Cada organização inclui repositórios Git privados, gratuitos e ilimitados.
  • Para criar ou importar um repositório, você deve ser membro do grupo de segurança Administradores do Projeto ou ter a permissão Criar repositório no nível do projeto do Git definida como Permitir. Para saber mais, confira Definir permissões de Repositório do Git.
  • Para usar o recurso de repositório de Importação do Azure DevOps, você deve ter a Atualização 1 ou superior do TFS 2017.
  • Para importar um repositório usando o TFS 2017 RTM ou anterior, confira Importar manualmente um repositório usando a CLI do Git.

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 master, 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.

Importar para um novo repositório

  1. Selecione Repositórios, Arquivos.

    Exibir seus branches

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

    Gerenciar repositórios

  3. Se o repositório de origem estiver disponível publicamente, basta inserir a URL de clone do repositório de origem e um nome para o novo Repositório do Git.

    Se o repositório de origem for privado, mas puder ser acessado usando a autenticação básica (nome de usuário-senha, token de acesso pessoal etc.), selecione Requer autorização e insira suas credenciais. Não há suporte para autenticação SSH, mas você pode importar manualmente um repositório que usa a autenticação SSH seguindo as etapas em Importar manualmente um repositório usando a CLI do Git.

    Caixa de diálogo Importar Repositório

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. Você precisará fornecer credenciais se o repositório de origem exigir autenticação.

Importar Repositório para 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.

Observação

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. Em seguida, a solicitação de importação incluirá a 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

O recurso de repositório de importação foi introduzido no TFS 2017 Atualização 1. Se você estiver usando o TFS 2017 RTM ou anterior, poderá usar as etapas a seguir para importar manualmente um repositório para o TFS. Você também pode seguir estas etapas para importar manualmente um repositório para um repositório Azure DevOps Services substituindo TFS por Azure Repos nas etapas a seguir.

  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 usando o TFS 2017 RTM e anote a URL de 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 de --mirror substituirá todos os branches no repositório de destino, o que inclui a exclusão de todos os branches 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 comandos a seguir.

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

Perguntas frequentes

Embora na maioria das vezes a importação seja bem-sucedida, as condições a seguir podem causar problemas.

E se meu repositório Source estiver por trás da autenticação de dois fatores?

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 do Git, como o GitHub e o Azure DevOps Services dão suporte a tokens pessoais que podem ser fornecidos ao serviço de importação.

E se meu repositório de origem não der suporte a multi_ack?

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 esse recurso, 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.

Posso importar de versões anteriores do Team Foundation Server?

Se o Repositório do Git de origem estiver em uma versão do TFS anterior ao TFS 2017 RTM, a importação falhará. Isso acontece devido a uma incompatibilidade de contrato entre as versões mais recentes do Azure DevOps Services/TFS e as versões anteriores a 2017 do RTM do TFS.

Posso usar credenciais baseadas em MSA?

Infelizmente, as credenciais baseadas em MSA (Conta Microsoft, anteriormente Live ID) não funcionarão. 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/senha que você está usando não for de autenticação básica, tanto a autenticação quanto a importação falharão. Uma maneira de verificar se o nome de usuário/senha que você está usando é ou não de autenticação básica é tentar usar o Git para clonar seu repositório usando o formato abaixo

git clone https://<<username>>:<<password>>@<<remaining clone Url>>

Posso importar do TFVC?

Você pode migrar código de um repositório TFVC existente para um novo Repositório do Git na mesma conta. Embora a migração para o Git tenha muitos benefícios, é um processo complexo 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 alteração disruptiva que requer um planejamento cuidadoso. Para obter mais informações, consulte Importar do TFVC para o Git.

E se meu repositório de origem contiver objetos Git LFS?

A importação do Git não importará 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. Isso copiará todos os objetos Git da origem para o Azure DevOps (isso também importará os ponteiros LFS que são objetos Git, mas não os arquivos LFS)

Para mover os arquivos de LFS (você precisará tanto do Git.exe quanto do cliente LFS na mesma caixa, além de acesso tanto ao repositório de origem quanto ao repositório de destino)

  • Clone o repositório importado do Azure DevOps para o sistema local. O clone funcionará, mas ele falhará ao executar o check-out dos arquivos LFS
  • Adicionar o repositório de origem como remoto (por exemplo, 'origem')
  • Execute git lfs fetch source --all (isso trará 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

Posso importar atualizações se a origem for alterada mais tarde?

O serviço de importação serve para fazer a importação inicial de um repositório inteiro. Para espelhar as alterações posteriores, você precisará de um clone local do repositório com remotos definidos como origem e destino.

Você pode sincronizar as alterações usando os comandos a seguir. Trataremos 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