Delen via


Een Git-opslagplaats importeren in een project

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

In dit artikel leest u hoe u een bestaande Git-opslagplaats importeert vanuit GitHub, Bitbucket, GitLab of een andere locatie in een nieuwe of lege bestaande opslagplaats in uw Azure DevOps-project.

Vereisten

Categorie Vereisten
Toegang tot het project Lid van een project.
toestemmingen - Code weergeven in privéprojecten: ten minste Basic toegang.
- Klonen of bijdragen aan code in privéprojecten: Lid van de Inzenders beveiligingsgroep of bijbehorende machtigingen in het project.
- Machtigingen voor tak of opslagplaats instellen: Machtigingen beheren machtigingen voor de tak of opslagplaats.
- Standaardtak wijzigen: beleid bewerken machtigingen voor de opslagplaats.
- Een opslagplaats importeren: Lid van de Projectbeheerders beveiligingsgroep of Git-projectniveau Opslagplaats maken machtiging ingesteld op Toestaan. Zie Machtigingen voor Git-opslagplaatsen instellen voor meer informatie.
Diensten Repositories ingeschakeld.
Gereedschappen Optioneel. Gebruik az repos opdrachten: Azure DevOps CLI.

Notitie

In openbare projecten hebben gebruikers met Stakeholder volledige toegang tot Azure Repos, waaronder het weergeven, klonen en bijdragen aan code.

Categorie Vereisten
Toegang tot het project Lid van een project.
toestemmingen - Code weergeven: ten minste Basis toegang.
- Klonen of bijdragen aan code: Lid van de beveiligingsgroep Contributors of bijbehorende machtigingen in het project.
Diensten Repositories ingeschakeld.

Importeren in een nieuwe opslagplaats

Voer de volgende stappen uit om te importeren in een nieuwe opslagplaats:

Notitie

Wanneer het importeren van de opslagplaats is voltooid, stelt Azure DevOps de standaardbranch in voor die geïmporteerde opslagplaats. Als de geïmporteerde opslagplaats een vertakking met de naam mainbevat, wordt deze ingesteld als de standaardbranch, anders wordt de eerste vertakking (in alfabetische volgorde) van de geïmporteerde opslagplaats ingesteld als Standaard.

  1. Meld u in uw browser aan bij uw organisatie en selecteer Repos>Bestanden.

    Schermopname toont afbeelding van vertakkingen.

  2. Selecteer in de vervolgkeuzelijst de optie Opslagplaats importeren.

    Schermopname van het scherm Opslagplaatsen beheren.

  3. Voer de kloon-URL van de bronopslagplaats en een naam in voor uw nieuwe Git-opslagplaats.

Schermopname van dialoogvenster Opslagplaats importeren met openbaar beschikbare voorbeeldopslagplaats-URL.

  1. Selecteer Een opslagplaats importeren.

De repository wordt geïmporteerd.

Importeren in een bestaande lege opslagplaats

Selecteer Importeren op de pagina Bestanden van de lege Git-opslagplaats en voer de kloon-URL in. Geef referenties op als voor de bronopslagplaats verificatie is vereist.

Schermopname van Import Repository in een bestaande opslagplaats.

Notitie

Met de importfunctie wordt automatische koppeling uitgeschakeld voor werkitems die worden vermeld in een opmerking bij doorvoeren, omdat de werkitem-id's in het doelproject mogelijk niet hetzelfde zijn als de items in het bronproject. Automatisch koppelen voor werkitems die worden vermeld in een commit, kan opnieuw worden ingeschakeld door te navigeren naar Instellingen, Versiebeheer, uw opslagplaats te selecteren en Opties te kiezen. Zie Werkitems koppelen aan committeringen voor meer informatie over het koppelen van committeringen aan werkitems.

Een opslagplaats handmatig importeren met az repos CLI

U kunt az repos import gebruiken om een opslagplaats te importeren in uw Azure DevOps-project.

U moet eerst de opslagplaats maken in Azure DevOps voordat u een Git-opslagplaats kunt importeren. De opslagplaats die u maakt, moet ook leeg zijn. Zie Uw Git-opslagplaats maken in Azure-opslagplaatsen om een opslagplaats te maken.

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

Parameters

Kenmerk Beschrijving
git-source-url Vereist. URL van de git-bronopslagplaats die moet worden geïmporteerd.
detect Optioneel. Organisatie automatisch detecteren. Geaccepteerde waarden: false, true.
git-service-endpoint-id Optioneel. Service-eindpunt voor verbinding met extern eindpunt.
org, organization Url van de Azure DevOps-organisatie. U kunt de standaardorganisatie configureren met behulp van az devops configure -d organization=<ORG_URL>. Vereist indien niet geconfigureerd als standaard of opgehaald via git-configuratie. Voorbeeld: https://dev.azure.com/MyOrganizationName/.
project, p Naam of id van het project. U kunt het standaardproject configureren met behulp van az devops configure -d project=<NAME_OR_ID>. Vereist indien niet geconfigureerd als standaard of opgehaald via git-configuratie.
repository Naam of id van de opslagplaats waarin de importaanvraag moet worden gemaakt.
requires-authorization Vlag om aan te geven of de git-bronopslagplaats privé is. Als u verificatie nodig hebt, genereert u een verificatietoken op de bronopslagplaats en stelt u de omgevingsvariabele AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT in op de waarde van het token. Voor verbeterde beveiliging raden we u aan om waar mogelijk Microsoft Entra ID-tokens te gebruiken. Vervolgens bevat de importaanvraag verificatie.
subscription Naam of id van het abonnement. U kunt het standaardabonnement configureren met behulp van az account set -s <NAME_OR_ID>.
user-name Gebruikersnaam die moet worden opgegeven wanneer de Git-opslagplaats privé is.

Voorbeeld

Met de volgende opdracht importeert u de openbare opslagplaats fabrikam-open-source naar de lege Git-opslagplaats fabrikam-open-source voor de standaardconfiguratie 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"
}

Een opslagplaats handmatig importeren met git CLI

  1. Kloon de bronopslagplaats naar een tijdelijke map op uw computer met behulp van de bare optie, zoals wordt weergegeven in het volgende opdrachtregelvoorbeeld en navigeer vervolgens naar de map van de opslagplaats. Bij het klonen met behulp van de bare optie bevat de mapnaam het .git achtervoegsel. In dit voorbeeld https://github.com/contoso/old-contoso-repo.git moet de bronopslagplaats handmatig worden geïmporteerd.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Maak een doelopslagplaats en noteer de kloon-URL. In dit voorbeeld https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo is dit de URL voor de nieuwe doelopslagplaats.

  3. Voer de volgende opdracht uit om de bronopslagplaats naar de doelopslagplaats te kopiëren.

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

    Waarschuwing

    Gebruik van --mirror overschrijft alle vertakkingen in de doelopslagplaats, waarbij alle vertakkingen die zich niet in de bronopslagplaats bevinden, worden verwijderd.

  4. Als de bronopslagplaats LFS-objecten bevat, haalt u deze op en kopieert u deze uit de bronopslagplaats naar de doelopslagplaats.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Verwijder de tijdelijke map door de volgende opdrachten uit te voeren.

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

Veelgestelde vragen (FAQ's)

Hoewel de invoer het vaakst succesvol is, kunnen de volgende voorwaarden problemen veroorzaken.

V: Wat gebeurt er als mijn bronopslagplaats zich achter tweeledige verificatie bevindt?

A: De importservice maakt gebruik van REST API's voor het valideren en activeren van importeren en kan niet rechtstreeks werken met opslagplaatsen waarvoor tweeledige verificatie is vereist.

De meeste Git-hostingproviders ondersteunen verificatietokens die kunnen worden geleverd aan de importservice:

Microsoft Entra ID-tokens (aanbevolen): Microsoft Entra ID-tokens bieden betere beveiliging en zijn de aanbevolen verificatiemethode. U kunt deze tokens verkrijgen via:

  • Azure CLI (voor ontwikkeling/testen):

    az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
    
  • Service-principal (voor productie-/geautomatiseerde scenario's):

    • Een sollicitatie in ID Microsoft Entra registreren
    • Een clientgeheim voor de toepassing maken
    • Bied de toepassing de juiste machtigingen in Azure DevOps.
    • Gebruik de inloggegevens van de serviceprincipal om programmatisch tokens op te halen

Persoonlijke toegangstokens (alternatief):GitHub en Azure DevOps ondersteunen ook persoonlijke toegangstokens.

V: Wat gebeurt er als mijn bronopslagplaats geen ondersteuning biedt voor multi_ack?

A: De importservice maakt gebruik van de multi_ack mogelijkheid van het Git-protocol tijdens het importeren. Als de bronopslagplaats deze mogelijkheid niet biedt, kan de importservice niet importeren uit de opgegeven bron. Deze fout kan optreden bij het maken van een importaanvraag of wanneer het importeren wordt uitgevoerd.

V: Kan ik importeren uit eerdere versies?

A: Als de Git-bronopslagplaats zich in een on-premises versie bevindt die ouder is dan 2017 RTM, mislukt het importeren, omdat een contract niet overeenkomt tussen de nieuwste Azure DevOps en eerdere versies.

V: Kan ik referentiegegevens op basis van MSA gebruiken?

A: Helaas, MSA-referenties (Microsoft-account) werken niet. De importservice is afhankelijk van basisverificatie om te communiceren met de bronopslagplaats. Als de gebruikersnaam en het wachtwoord die u gebruikt geen basisverificatie zijn, mislukt de verificatie en het importeren. Een manier om te controleren of de gebruikersnaam en het wachtwoord die u gebruikt voor basisverificatie zijn, is git te gebruiken om uw repository te klonen met de volgende indeling:

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

V: Kan ik importeren vanuit TFVC?

A: U kunt code migreren van een bestaande TFVC-opslagplaats naar een nieuwe Git-opslagplaats binnen hetzelfde account. Hoewel migratie naar Git veel voordelen heeft, is het een betrokken proces voor grote TFVC-opslagplaatsen en -teams. Gecentraliseerde versiebeheersystemen, zoals TFVC, gedragen zich op fundamentele manieren anders dan Git. De overstap omvat veel meer dan het leren van nieuwe commando's. Het is een verstorende wijziging waarvoor zorgvuldige planning is vereist. Zie Importeren van TFVC naar Git voor meer informatie.

V: Wat gebeurt er als mijn bronopslagplaats Git LFS-objecten bevat?

A: Git-import importeert geen Git LFS-objecten.

LFS-objecten kunnen worden verplaatst met behulp van de volgende stappen:

  • Importeer de opslagplaats met behulp van de importopslagplaatsfunctie in Azure DevOps. Met deze actie worden alle Git-objecten gekopieerd van bron naar Azure DevOps, waarmee ook de LFS-pointers worden geïmporteerd die Git-objecten zijn, maar niet de LFS-bestanden

Als u de LFS-bestanden wilt verplaatsen, hebt u zowel Git.exe als LFS-client in hetzelfde vak nodig en toegang tot zowel de bronopslagplaats als de doelopslagplaats

  • Kloon de geïmporteerde opslagplaats van Azure DevOps naar het lokale systeem. Klonen werkt, maar het mislukt tijdens het uitchecken van LFS-bestanden
  • Voeg de bronopslagplaats toe als extern, bijvoorbeeld 'bron'
  • Uitvoeren git lfs fetch source --all, die alle LFS-bestanden van de bron naar uw lokale opslagplaats brengt
  • Ervan uitgaande dat de VSTS-doelopslagplaats uw externe doelopslagplaats is
  • Uitvoeren git lfs push target --all

V: Kan ik updates importeren als de bron later verandert?

A: De importservice is bedoeld voor het aanvankelijk importeren van een hele opslagplaats. Als u latere wijzigingen wilt spiegelen, hebt u een lokale kloon van de opslagplaats nodig met externe instellingen ingesteld op zowel de bron als de bestemming.

U kunt wijzigingen synchroniseren met behulp van de volgende opdrachten. We behandelen het importeren van Azure-opslagplaatsen als origin en de oorspronkelijke opslagplaats als 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

Volgende stappen