Dela via


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

Kategori Krav
Åtkomst till projekt Medlem av ett -projekt.
behörigheter Visa kod i privata projekt: Minst grundläggande åtkomst .
– Klona eller bidra till kod i privata projekt: Medlem i Bidragsgivare säkerhetsgrupp eller projektets motsvarande behörigheter.
– Ange behörigheter för gren eller lagringsplats: Hantera behörigheter behörigheter för grenen eller lagringsplatsen.
– Ändra standardgren: Redigera principer behörigheter för lagringsplatsen.
– Importera en lagringsplats: Medlem i Projektadministratörer säkerhetsgrupp eller Git-projektnivå Skapa lagringsplats behörighet inställd på Tillåt. Mer information finns i Ange Behörigheter för Git-lagringsplats.
Tjänster Repos aktiverat.
Verktyg Valfritt. Använd kommandona az repos: Azure DevOps CLI.

Kommentar

I offentliga projekt har användare med åtkomst på intressentnivå fullständig åtkomst till Azure Repos, inklusive att se, klona och bidra till kod.

Kategori Krav
Åtkomst till projekt Medlem av ett -projekt.
behörigheter – Visa kod: Minst Grundläggande åtkomst.
– Klona eller bidra till kod: Medlem i Contributors säkerhetsgrupp eller motsvarande behörigheter i projektet.
Tjänster Repos aktiverat.

Anteckning

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 mainanges 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 Repo, Filer.

    Visa dina grenar

  2. Från rullgardinsmenyn för lagringsplatsen, välj 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

::: moniker-end

Importera till en befintlig tom lagringsplats

På sidan Filer på den tomma Git-lagringsplatsen väljer du Importera och anger klonings-URL:en. 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 kopplar commits med arbetsobjekt finns i Koppla arbetsobjekt till commits

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 Beskrivning
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 genom att använda az devops configure -d organization=<ORG_URL>. 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 innehåller importbegäran 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 uppdatering 1 från 2017. 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 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 innefattar att ta bort 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 (FAQ)

Även om importen oftast lyckas kan följande villkor orsaka problem.

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

S: 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 användas i importtjänsten.

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

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

F: Kan jag importera från tidigare versioner?

S: Om git-källlagringsplatsen är i en TFS-version tidigare än TFS 2017 RTM misslyckas importen. Detta inträffar på grund av ett kontraktsfel mellan de senaste Azure DevOps och tidigare versioner.

F: Kan jag använda MSA-baserade autentiseringsuppgifter?

S: 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. 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 följande format

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

F: Kan jag importera från TFVC?

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

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

S: 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. Den här åtgärden kopierar över alla Git-objekt från källan till Azure DevOps, som även importerar LFS-pekarna som är Git-objekt, men inte LFS-filerna

Om du vill flytta över LFS-filerna behöver du 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. Klon fungerar, men det uppstår fel vid utcheckning av LFS-filer.
  • Lägg till källlagringsplatsen som fjärrlagringsplats, till exempel "källa"
  • Utför git lfs fetch source --all, som tar över alla LFS-filer från källan till din lokala lagringsplats
  • Om destinatsions-VSTS-lagringsplatsen är din "mål"-fjärrlagringsplats
  • Utföra git lfs push target --all

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

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