Importer un dépôt Git

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

Cet article montre comment importer un référentiel Git existant à partir de GitHub, Bitbucket, GitLab ou d’un autre emplacement dans un nouveau référentiel ou un référentiel existant vide dans votre projet Azure DevOps.

Prérequis

  • Une organisation dans Azure DevOps. Si vous n’en avez pas, vous pouvez vous inscrire gratuitement. Chaque organisation inclut des référentiels Git privés gratuits et illimités.
  • Pour créer ou importer un référentiel, vous devez être membre du groupe de sécurité Administrateurs de projet ou disposer de l’autorisation Créer un référentiel au niveau du projet Git définie sur Autoriser. Pour plus d'informations, voir Définir les autorisations de référentiel Git.
  • Pour utiliser la fonctionnalité Importer le référentiel Azure DevOps, vous devez disposer de la mise à jour 1 de TFS 2017 ou version ultérieure.
  • Pour importer un référentiel à l’aide de TFS 2017 RTM ou version antérieure, consultez Importer manuellement un référentiel à l’aide de l’interface CLI.
  • Si vous souhaitez utiliser des commandes az repos, veillez à suivre les étapes décrites dans Prise en main d’Azure DevOps CLI.
  • Une organisation dans Azure DevOps. Si vous n’en avez pas, vous pouvez vous inscrire gratuitement. Chaque organisation inclut des référentiels Git privés gratuits et illimités.
  • Pour créer ou importer un référentiel, vous devez être membre du groupe de sécurité Administrateurs de projet ou disposer de l’autorisation Créer un référentiel au niveau du projet Git définie sur Autoriser. Pour plus d'informations, voir Définir les autorisations de référentiel Git.
  • Pour utiliser la fonctionnalité Importer le référentiel Azure DevOps, vous devez disposer de la mise à jour 1 de TFS 2017 ou version ultérieure.
  • Pour importer un référentiel à l’aide de TFS 2017 RTM ou version antérieure, consultez Importer manuellement un référentiel à l’aide de l’interface CLI.

Remarque

Une fois l’importation du référentiel terminée, Azure DevOps définit la branche par défaut de ce référentiel importé. Si le référentiel importé contient une branche nommée master, elle est définie comme la branche par défaut, sinon la première branche (par ordre alphabétique) du référentiel importé est définie comme la branche par défaut.

Importer dans un nouveau référentiel

  1. Sélectionnez Référentiels, Fichiers.

    Afficher vos branches

  2. Dans la liste déroulante du référentiel, sélectionnez Importer le référentiel.

    Gérer les dépôts

  3. Si le référentiel source est disponible publiquement, entrez simplement l’URL du clone du référentiel source et un nom pour votre nouveau référentiel Git.

    Si le référentiel source est privé, mais accessible à l’aide de l’authentification de base (nom d’utilisateur-mot de passe, jeton d’accès personnel, etc.), sélectionnez Exiger une autorisation et entrer vos informations d’identification. L’authentification SSH n’est pas prise en charge, mais vous pouvez importer manuellement un référentiel qui utilise l’authentification SSH en suivant les étapes de l’importation manuelle d’un référentiel à l’aide de l’interface CLI.

    Boîte de dialogue Importer un référentiel

Importer dans un référentiel vide existant

Dans la page Fichiers du référentiel Git vide, sélectionnez Importer et entrez l’URL du clone. Vous devez fournir des informations d’identification si le référentiel source nécessite l’authentification.

Importer un référentiel dans un référentiel existant

Notes

La fonctionnalité d’importation désactive la liaison automatisée pour les éléments de travail mentionnés dans un commentaire de validation, car les ID d’élément de travail dans le projet de destination peuvent ne pas être identiques à ceux du projet source. La liaison automatique pour les éléments de travail mentionnés dans une validation peut être réactivée en accédant à Paramètres, Contrôle de version, en sélectionnant votre référentiel et en choisissantOptions . Pour plus d’informations sur la liaison de validations avec des éléments de travail, consultez Lier des éléments de travail à des validations

Importer manuellement un dépôt à l’aide de la commande CLI az repos

Vous pouvez utiliser az repos import pour importer un référentiel dans votre projet Azure DevOps.

Notes

Vous devez d’abord créer le référentiel dans Azure DevOps avant de pouvoir importer un référentiel Git. En outre, le référentiel que vous créez doit être vide. Pour créer un référentiel, consultez Créer votre référentiel Git dans Azure Repos.

az repos import create --git-source-url
                       [--detect {false, true}]
                       [--git-service-endpoint-id]
                       [--org]
                       [--project]
                       [--repository]
                       [--requires-authorization]
                       [--subscription]
                       [--user-name]

Paramètres

Paramètre Description
git-source-url Obligatoire. URL du référentiel Git source à importer.
detect facultatif. Détectez automatiquement l’organisation. Valeurs acceptées : false, true.
git-service-endpoint-id facultatif. Point de terminaison de service pour la connexion au point de terminaison externe.
org, organization URL de l’organisation Azure DevOps. Vous pouvez configurer l’organisation par défaut à l’aide de az devops configure -d organization=<ORG_URL>. Obligatoire s’il n’est pas configuré par défaut ou récupéré via git config. Exemple : https://dev.azure.com/MyOrganizationName/.
project, p Nom ou ID du projet. Vous pouvez configurer le projet par défaut en utilisant az devops configure -d project=<NAME_OR_ID>. Obligatoire s’il n’est pas configuré comme valeur par défaut ou récupéré par le biais de la configuration Git.
repository Nom ou ID du référentiel dans lequel créer la demande d’importation.
requires-authorization Indicateur pour indiquer si le référentiel Git source est privé. Si vous avez besoin d’authentification, générez un jeton d’authentification sur le référentiel source et définissez la variable d’environnement AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT sur la valeur du jeton. Ensuite, la demande d’importation inclut l’authentification.
subscription Nom ou ID de l’abonnement. Vous pouvez configurer l’abonnement par défaut en utilisant az account set -s <NAME_OR_ID>.
user-name Nom d’utilisateur à spécifier lorsque le référentiel Git est privé.

Exemple

La commande suivante importe le référentiel public fabrikam-open source vers le référentiel Git vide fabrikam-open source pour la configuration par défaut 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"
}

Importer manuellement un dépôt à l’aide de la commande CLI git

La fonctionnalité de référentiel d’importation a été introduite dans la mise à jour 1 de TFS 2017. Si vous utilisez TFS 2017 RTM ou version antérieure, vous pouvez utiliser les étapes suivantes pour importer manuellement un référentiel dans TFS. Vous pouvez également suivre ces étapes pour importer manuellement un référentiel dans un référentiel Azure DevOps Services en remplaçant TFS par Azure Repos dans les étapes suivantes.

  1. Clonez le référentiel source dans un dossier temporaire sur votre ordinateur à l’aide de l’option bare , comme illustré dans l’exemple de ligne de commande suivant, puis accédez au dossier du référentiel. Lors du clonage à l’aide de l’option bare, le nom du dossier inclut le suffixe .git. Dans cet exemple, https://github.com/contoso/old-contoso-repo.git est le référentiel source à importer manuellement.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Créez un référentiel cible à l’aide de TFS 2017 RTM et notez l’URL du clone. Dans cet exemple, https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo est l’URL du nouveau référentiel cible.

  3. Exécutez la commande suivante pour copier le référentiel source dans le référentiel cible.

    git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    

    Avertissement

    L’utilisation de --mirror remplace toutes les branches du référentiel cible, ce qui inclut la suppression de toutes les branches qui ne figurent pas dans le référentiel source.

  4. Si le référentiel source contient des objets LFS, récupérez-les et copiez-les à partir du référentiel source vers le référentiel cible.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Supprimez le dossier temporaire en exécutant les commandes suivantes.

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

Forum aux questions

Bien que la plupart du temps l’importation réussisse, les conditions suivantes peuvent entraîner des problèmes.

Que se passe-t-il si mon référentiel source se trouve derrière l’authentification à deux facteurs ?

Le service d’importation utilise des API REST pour valider et déclencher l’importation et ne peut pas fonctionner directement avec les référentiels qui nécessitent une authentification à deux facteurs. La plupart des fournisseurs d’hébergement Git comme GitHub et Azure DevOps Services prennent en charge les jetons personnels qui peuvent être fournis au service d’importation.

Que se passe-t-il si mon référentiel source ne prend pas en charge multi_ack ?

Le service d’importation utilise la fonctionnalité de multi_ack du protocole Git pendant l’importation. Si le référentiel source ne fournit pas cette fonctionnalité, le service d’importation peut échouer à importer à partir de la source donnée. Cet échec peut se produire lors de la création d’une demande d’importation ou lors de l’importation en cours.

Puis-je importer à partir des versions précédentes de Team Foundation Server ?

Si le référentiel Git source se trouve dans une version TFS antérieure à TFS 2017 RTM, l’importation échoue. Cela se produit en raison d’une incompatibilité de contrat entre les dernières versions d’Azure DevOps Services/TFS et les versions antérieures à 2017 RTM de TFS.

Puis-je utiliser des informations d’identification basées sur MSA ?

Malheureusement, les informations d’identification basées sur MSA (compte Microsoft, anciennement Live ID) ne fonctionneront pas. Le service d’importation s’appuie sur l’authentification de base pour communiquer avec le référentiel source. Si le nom d’utilisateur/mot de passe que vous utilisez n’est pas l’authentification de base, l’authentification échoue et l’importation échoue. Une façon de vérifier si le nom d’utilisateur/mot de passe que vous utilisez est l’authentification de base ou non consiste à essayer d’utiliser Git pour cloner votre référentiel au format ci-dessous

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

Puis-je importer à partir de TFVC ?

Vous pouvez migrer du code à partir d’un référentiel TFVC existant vers un nouveau référentiel Git dans le même compte. Bien que la migration vers Git présente de nombreux avantages, il s’agit d’un processus impliqué pour les grands référentiels et équipes TFVC. Les systèmes de contrôle de version centralisés, comme TFVC, se comportent différemment de Git de manière fondamentale. Le commutateur implique beaucoup plus que d’apprendre de nouvelles commandes. Il s’agit d’un changement perturbant qui nécessite une planification minutieuse. Pour plus d’informations, consultez Importer à partir de TFVC vers Git.

Que se passe-t-il si mon référentiel source contient des objets Git LFS ?

L’importation Git n’importe pas d’objets Git LFS.

Les objets LFS peuvent être déplacés en procédant comme suit :

  • Importez le référentiel à l’aide de la fonctionnalité d’importation de référentiel dans Azure DevOps. Cette opération copie tous les objets Git de la source vers Azure DevOps (cela importera également les pointeurs LFS qui sont des objets Git, mais pas les fichiers LFS)

Passer au-dessus des fichiers LFS (vous aurez besoin de Git.exe et du client LFS dans la même zone et d’un accès au référentiel source et au référentiel de destination)

  • Cloner le référentiel importé d’Azure DevOps vers le système local, le clone fonctionnera, mais il échouera lors de l’extraction des fichiers LFS
  • Ajouter le référentiel source en tant que distant (par exemple « source »)
  • Effectuer git lfs fetch source --all (cela amène tous les fichiers LFS de la source vers votre référentiel local)
  • En supposant que le référentiel VSTS de destination est votre « cible » distante
  • Effectuer git lfs push target --all

Puis-je importer des mises à jour si la source change ultérieurement ?

Le service d’importation est initialement destiné à importer un référentiel entier. Pour mettre en miroir les modifications ultérieures, vous aurez besoin d’un clone local du référentiel avec des distances définies sur la source et la destination.

Vous pouvez synchroniser les modifications à l’aide des commandes suivantes. Nous traiterons l’importation Azure Repos comme origin et le référentiel d’origine comme 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

Étapes suivantes