Partager via


Importer un dépôt Git dans un projet

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

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.

Prerequisites

Catégorie Spécifications
Accès au projet Membre d’un projet.
Autorisations - Afficher le code dans les projets privés : accès basique minimum.
- Cloner ou contribuer au code dans des projets privés : membre du groupe de sécurité Contributeurs ou des autorisations correspondantes dans le projet.
- Définir des autorisations de branche ou de référentiel : Gérer les autorisations pour la branche ou le référentiel.
- Modifier la branche par défaut : modifier les autorisations des stratégies pour le référentiel.
- Importer un référentiel : membre du groupe de sécurité Administrateurs de projets ou autorisation pour 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.
Services Référentiels activés.
Outils facultatif. Utilisez les commandes az repos : Azure DevOps CLI.

Note

Dans les projets publics, les utilisateurs disposant de l’accès Stakeholder ont un accès complet à Azure Repos, y compris l’affichage, le clonage et la contribution au code.

Catégorie Spécifications
Accès au projet Membre d’un projet.
Autorisations - Afficher le code : accès basique minimum.
- Cloner ou contribuer au code : membre du groupe de sécurité Contributeurs ou des autorisations correspondantes dans le projet.
Services Référentiels activés.

Importer dans un nouveau référentiel

Procédez comme suit pour effectuer l’importation dans un nouveau dépôt :

Note

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 main, elle est définie comme branche par défaut, sinon la première branche (par ordre alphabétique) du référentiel importé est définie comme valeur par défaut.

  1. Dans votre navigateur, connectez-vous à votre organisation et sélectionnez Repos>Fichiers.

    Capture d’écran montrant la vue des branches.

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

    Capture d’écran montrant l’écran Gérer les référentiels.

  3. Entrez l’URL de clone du référentiel source et un nom pour votre nouveau référentiel Git.

Capture d’écran montrant la boîte de dialogue Importer un référentiel avec un exemple d’URL de dépôt disponible publiquement.

  1. Sélectionnez Importer un référentiel.

Le référentiel est importé.

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. Fournissez des informations d’identification si le référentiel source nécessite une authentification.

Capture d’écran montrant Importer un référentiel dans un référentiel existant.

Note

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.

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 Descriptif
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 si elle n’est pas configurée par défaut ou récupérée via git config. Exemple : https://dev.azure.com/MyOrganizationName/.
project, p Nom ou ID du projet. Vous pouvez configurer le projet par défaut à l’aide de la commande 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. Pour renforcer la sécurité, nous vous recommandons d’utiliser des jetons d’ID Microsoft Entra lorsque cela est possible. 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

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

    Warning

    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 possède des objets LFS, récupérez-les et copiez-les 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
    

Questions Fréquemment Posées (FAQ)

Bien que les importations réussissent le plus souvent, les conditions suivantes peuvent entraîner des problèmes.

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

R : 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 prennent en charge les jetons d’authentification qui peuvent être fournis au service d’importation :

Jetons d’ID Microsoft Entra (recommandé) : Les jetons d’ID Microsoft Entra offrent une meilleure sécurité et sont la méthode d’authentification recommandée. Vous pouvez obtenir ces jetons via :

  • Azure CLI (pour le développement/test) :

    az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
    
  • Service Principal (pour les scénarios de production/automatisés) :

    • Inscrire une application dans Microsoft Entra ID
    • Créer une clé secrète client pour l’application
    • Accorder les autorisations appropriées à l’application dans Azure DevOps
    • Utiliser les informations d’identification du principal de service pour obtenir des jetons par programmation

Jetons d’accès personnel (alternative) :GitHub et Azure DevOps prennent également en charge les jetons d’accès personnels.

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

R : 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.

Q : Puis-je importer à partir des versions précédentes ?

R : Si le dépôt Git source se trouve dans une version locale antérieure à 2017 RTM, l’importation échoue, en raison d’une incompatibilité de contrat entre les dernières versions Azure DevOps et les versions précédentes.

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

R : Malheureusement, les informations d’identification basées sur MSA (compte Microsoft) ne fonctionnent 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 et le mot de passe que vous utilisez ne sont pas d’authentification de base, l’authentification et l’importation échouent. Une façon de vérifier si le nom d’utilisateur/mot de passe que vous utilisez sont l’authentification de base consiste à essayer d’utiliser Git pour cloner votre référentiel au format suivant :

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

Q : Puis-je importer à partir de TFVC ?

R : Vous pouvez migrer du code à partir d’un dépôt 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 dépôts 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.

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

R : 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 action copie tous les objets Git de la source vers Azure DevOps, qui importent également les pointeurs LFS qui sont des objets Git, mais pas les fichiers LFS

Pour passer au-dessus des fichiers LFS, vous avez 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

  • Clonez le référentiel importé d’Azure DevOps vers le système local. Le clone fonctionne, mais il échoue lors de l’extraction des fichiers LFS
  • Ajoutez le référentiel source comme distant, par exemple « source »
  • Effectuer git lfs fetch source --all, qui 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

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

R : Le service d’importation est destiné à importer initialement 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 traitons l’importation Azure Repos comme origin et le dépôt 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