Importera en Git-lagringsplats

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

Den här artikeln visar hur du importerar en befintlig Git-lagringsplats från GitHub, Bitbucket, GitLab eller någon annan plats till en ny eller tom befintlig lagringsplats i ditt Azure DevOps-projekt.

Förutsättningar

  • En organisation i Azure DevOps. Om du inte har en kan du registrera dig för en kostnadsfritt. Varje organisation innehåller kostnadsfria, obegränsade privata Git-lagringsplatser.
  • Om du vill skapa eller importera en lagringsplats måste du vara medlem i säkerhetsgruppen Projektadministratörer eller ha behörigheten Skapa lagringsplats på Git-projektnivå inställd på Tillåt. Mer information finns i Ange Behörigheter för Git-lagringsplats.
  • Om du vill använda azure DevOps Import-lagringsplatsen måste du ha TFS 2017 Update 1 eller senare.
  • Information om hur du importerar en lagringsplats med TFS 2017 RTM eller tidigare finns i Importera en lagringsplats manuellt med git CLI.
  • Om du vill använda az repos-kommandon ska du följa stegen i Kom igång med Azure DevOps CLI.
  • En organisation i Azure DevOps. Om du inte har en kan du registrera dig för en kostnadsfritt. Varje organisation innehåller kostnadsfria, obegränsade privata Git-lagringsplatser.
  • Om du vill skapa eller importera en lagringsplats måste du vara medlem i säkerhetsgruppen Projektadministratörer eller ha behörigheten Skapa lagringsplats på Git-projektnivå inställd på Tillåt. Mer information finns i Ange Behörigheter för Git-lagringsplats.
  • Om du vill använda azure DevOps Import-lagringsplatsen måste du ha TFS 2017 Update 1 eller senare.
  • Information om hur du importerar en lagringsplats med TFS 2017 RTM eller tidigare finns i Importera en lagringsplats manuellt med git CLI.

Kommentar

När importen av lagringsplatsen har slutförts anger Azure DevOps standardgrenen för den importerade lagringsplatsen. Om den importerade lagringsplatsen innehåller en gren med namnet masteranges den som standardgren, annars anges den första grenen (i alfabetisk ordning) för den importerade lagringsplatsen som Standard.

Importera till en ny lagringsplats

  1. Välj Lagringsplatser, Filer.

    Visa dina grenar

  2. I listrutan på lagringsplatsen väljer du Importera lagringsplats.

    Hantera lagringsplatser

  3. Om källlagringsplatsen är offentligt tillgänglig anger du bara klonings-URL:en för källlagringsplatsen och ett namn på din nya Git-lagringsplats.

    Om källlagringsplatsen är privat men kan nås med grundläggande autentisering (användarnamn-lösenord, personlig åtkomsttoken osv.) väljer du Kräver auktorisering och anger dina autentiseringsuppgifter. SSH-autentisering stöds inte, men du kan manuellt importera en lagringsplats som använder SSH-autentisering genom att följa stegen i Importera en lagringsplats manuellt med git CLI.

    Dialogrutan Importera lagringsplats

Importera till en befintlig tom lagringsplats

På sidan Filer på den tomma Git-lagringsplatsen väljer du Importera och anger klonings-URL:en. Du måste ange autentiseringsuppgifter om källlagringsplatsen kräver autentisering.

Importera lagringsplatsen till en befintlig lagringsplats

Kommentar

Importfunktionen inaktiverar automatisk länkning för arbetsobjekt som anges i en incheckningskommentare eftersom arbetsobjektets ID:n i målprojektet kanske inte är samma som i källprojektet. Automatisk länkning för arbetsobjekt som nämns i en incheckning kan återaktiveras genom att navigera till Inställningar, Versionskontroll, välja lagringsplats och välja Alternativ. Mer information om hur du länkar incheckningar med arbetsobjekt finns i Länka arbetsobjekt till incheckningar

Importera en lagringsplats manuellt med az repos CLI

Du kan använda az repos import för att importera en lagringsplats till ditt Azure DevOps-projekt.

Kommentar

Du måste först skapa lagringsplatsen i Azure DevOps innan du kan importera en Git-lagringsplats. Dessutom måste lagringsplatsen som du skapar vara tom. Information om hur du skapar en lagringsplats finns i Skapa din Git-lagringsplats i Azure Repos.

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

Parameters

Parameter Description
git-source-url Obligatoriskt. URL för den git-källlagringsplats som ska importeras.
detect Valfritt. Identifiera organisationen automatiskt. Godkända värden: false, true.
git-service-endpoint-id Valfritt. Tjänstslutpunkt för anslutning till extern slutpunkt.
org, organization Url för Azure DevOps-organisation. Du kan konfigurera standardorganisationen med hjälp az devops configure -d organization=<ORG_URL>av . Krävs om det inte har konfigurerats som standard eller hämtats via git-konfiguration. Exempel: https://dev.azure.com/MyOrganizationName/.
project, p Projektets namn eller ID. Du kan konfigurera standardprojektet med .az devops configure -d project=<NAME_OR_ID> Krävs om det inte har konfigurerats som standard eller hämtats via git-konfiguration.
repository Namn eller ID för lagringsplatsen för att skapa importbegäran i.
requires-authorization Flagga för att ange om git-källlagringsplatsen är privat. Om du behöver autentisering genererar du en autentiseringstoken på källdatabasen och anger miljövariabeln AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT till värdet för token. Sedan kommer importbegäran att innehålla autentisering.
subscription Namn eller ID för prenumerationen. Du kan konfigurera standardprenumerationen med .az account set -s <NAME_OR_ID>
user-name Användarnamn för att ange när git-lagringsplatsen är privat.

Exempel

Följande kommando importerar den offentliga lagringsplatsen fabrikam-open-source till den tomma Git-lagringsplatsen fabrikam-open-source för standardkonfigurationen 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"
}

Importera en lagringsplats manuellt med git CLI

Importrepofunktionen introducerades i TFS 2017 Update 1. Om du använder TFS 2017 RTM eller tidigare kan du använda följande steg för att manuellt importera en lagringsplats till TFS. Du kan också följa de här stegen för att manuellt importera en lagringsplats till en Azure DevOps Services-lagringsplats genom att ersätta TFS med Azure Repos i följande steg.

  1. Klona källdatabasen till en tillfällig mapp på datorn med hjälp av bare alternativet, som du ser i följande kommandoradsexempel, och navigera sedan till lagringsplatsens mapp. När du klonar med bare alternativet innehåller mappnamnet suffixet .git . I det här exemplet https://github.com/contoso/old-contoso-repo.git är källdatabasen som ska importeras manuellt.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Skapa en målrepo med TFS 2017 RTM och anteckna klon-URL:en. I det här exemplet https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo är URL:en för den nya målplatsen.

  3. Kör följande kommando för att kopiera källdatabasen till måldatabasen.

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

    Varning

    Om du använder --mirror skrivs alla grenar i måldatabasen över, vilket inkluderar borttagning av grenar som inte finns i källdatabasen.

  4. Om källlagringsplatsen har LFS-objekt hämtar du dem och kopierar dem från källlagringsplatsen till mållagringsplatsen.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Ta bort den tillfälliga mappen genom att köra följande kommandon.

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

Vanliga frågor och svar

Även om importen för det mesta lyckas kan följande villkor orsaka problem.

Vad händer om min källlagringsplats ligger bakom tvåfaktorautentisering?

Importtjänsten använder REST-API:er för att verifiera och utlösa import och kan inte fungera direkt med lagringsplatser som kräver tvåfaktorautentisering. De flesta Git-värdleverantörer som GitHub och Azure DevOps Services stöder personliga token som kan levereras till importtjänsten.

Vad händer om min källlagringsplats inte stöder multi_ack?

Importtjänsten använder git-protokollets multi_ack kapacitet under importen. Om källlagringsplatsen inte tillhandahåller den här funktionen kan importtjänsten inte importera från den angivna källan. Det här felet kan inträffa när du skapar en importbegäran eller när importen pågår.

Kan jag importera från tidigare versioner av Team Foundation Server?

Om git-källlagringsplatsen finns i en TIDIGARE TFS-version än TFS 2017 RTM misslyckas importen. Detta inträffar på grund av ett kontraktsfel mellan de senaste Azure DevOps Services/TFS- och RTM-versionerna före 2017 av TFS.

Kan jag använda MSA-baserade autentiseringsuppgifter?

Tyvärr fungerar inte MSA-baserade autentiseringsuppgifter (Microsoft-konto, tidigare live-ID). Importtjänsten förlitar sig på grundläggande autentisering för att kommunicera med källlagringsplatsen. Om användarnamnet/lösenordet du använder inte är grundläggande autentisering misslyckas autentiseringen och importen misslyckas. Ett sätt att kontrollera om användarnamnet/lösenordet du använder är grundläggande autentisering eller inte är att försöka använda Git för att klona lagringsplatsen med formatet nedan

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

Kan jag importera från TFVC?

Du kan migrera kod från en befintlig TFVC-lagringsplats till en ny Git-lagringsplats inom samma konto. Även om migrering till Git har många fördelar är det en involverad process för stora TFVC-lagringsplatser och team. Centraliserade versionskontrollsystem, som TFVC, beter sig annorlunda än Git på grundläggande sätt. Växeln innebär mycket mer än att lära sig nya kommandon. Det är en störande förändring som kräver noggrann planering. Mer information finns i Importera från TFVC till Git.

Vad händer om min källlagringsplats innehåller Git LFS-objekt?

Git-import importerar inte Git LFS-objekt.

LFS-objekt kan flyttas med hjälp av följande steg:

  • Importera lagringsplatsen med hjälp av funktionen importera lagringsplats till Azure DevOps. Detta kopierar över alla Git-objekt från källan till Azure DevOps (detta importerar även LFS-pekarna som är Git-objekt men inte LFS-filerna)

Om du vill flytta över LFS-filerna (du behöver både Git.exe- och LFS-klienten i samma ruta och åtkomst till både källlagringsplatsen och mållagringsplatsen)

  • Klona den importerade lagringsplatsen från Azure DevOps till det lokala systemet, klonen fungerar men den misslyckas när du checkar ut LFS-filer
  • Lägg till källlagringsplatsen som fjärransluten (till exempel "källa")
  • Utför git lfs fetch source --all (detta kommer att föra över alla LFS-filer från källan till din lokala lagringsplats)
  • Förutsatt att målets VSTS-lagringsplats är din "mål"-fjärrlagringsplats
  • Utföra git lfs push target --all

Kan jag importera uppdateringar om källan ändras senare?

Importtjänsten används för att initialt importera en hel lagringsplats. Om du vill spegla senare ändringar behöver du en lokal klon av lagringsplatsen med fjärranslutningar inställda på både källa och mål.

Du kan synkronisera ändringar med hjälp av följande kommandon. Vi behandlar Azure Repos-importen som origin och den ursprungliga lagringsplatsen som 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

Nästa steg