Importieren eines Git-Repositorys

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

In diesem Artikel erfahren Sie, wie Sie ein vorhandenes Git-Repository aus GitHub, Bitbucket, GitLab oder einem anderen Speicherort in ein neues oder ein leeres vorhandenes Repository in Ihrem Azure DevOps-Projekt importieren.

Voraussetzungen

  • Eine Organisation in Azure DevOps. Wenn Sie über keine verfügen, können Sie sich kostenlos für eine registrieren. Jede Organisation beinhaltet kostenlose, unbegrenzte private Git-Repositorys.
  • Zum Erstellen oder Importieren eines Repositorys müssen Sie Mitglied der Sicherheitsgruppe „Projektadministratoren“ sein, oder für Sie muss die Berechtigung Repository erstellen auf Git-Projektebene auf Zulassen festgelegt sein. Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.
  • Zum Verwenden des Azure DevOps-Features Repository importieren benötigen Sie TFS 2017 Update 1 oder höher.
  • Informationen zum Importieren eines Repositorys mithilfe von TFS 2017 RTM oder niedriger finden Sie unter Manuelles Importieren eines Repositorys mithilfe der Git CLI.
  • Wenn Sie az repos-Befehle verwenden möchten, müssen Sie die Schritte unter Erste Schritte mit der Azure DevOps CLI ausführen.
  • Eine Organisation in Azure DevOps Wenn Sie über keine verfügen, können Sie sich kostenlos für eine registrieren. Jede Organisation beinhaltet kostenlose, unbegrenzte private Git-Repositorys.
  • Zum Erstellen oder Importieren eines Repositorys müssen Sie Mitglied der Sicherheitsgruppe „Projektadministratoren“ sein, oder für Sie muss die Berechtigung Repository erstellen auf Git-Projektebene auf Zulassen festgelegt sein. Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.
  • Zum Verwenden des Azure DevOps-Features Repository importieren benötigen Sie TFS 2017 Update 1 oder höher.
  • Informationen zum Importieren eines Repositorys mithilfe von TFS 2017 RTM oder niedriger finden Sie unter Manuelles Importieren eines Repositorys mithilfe der Git CLI.

Hinweis

Wenn der Import des Repositorys abgeschlossen ist, legt Azure DevOps die Standardverzweigung für dieses importierte Repository fest. Wenn das importierte Repository eine Verzweigung mit dem Namen master enthält, wird es als Standardverzweigung festgelegt, andernfalls wird die erste Verzweigung (in alphabetischer Reihenfolge) des importierten Repositorys als Standard festgelegt.

Importieren in ein neues Repository

  1. Wählen Sie Repositorys, Dateien aus.

    Anzeigen Ihrer Branches

  2. Wählen Sie in der Dropdownliste der Repositorys Repository importieren aus.

    Verwalten von Repositorys

  3. Wenn das Quellrepository öffentlich verfügbar ist, geben Sie einfach die Klon-URL des Quellrepositorys und einen Namen für Ihr neues Git-Repository ein.

    Wenn das Quellrepository privat ist, aber mittels Standardauthentifizierung (Benutzername/Kennwort, persönliches Zugriffstoken usw.) darauf zugegriffen werden kann, wählen Sie Autorisierung erforderlich aus, und geben Sie Ihre Anmeldeinformationen ein. SSH-Authentifizierung wird nicht unterstützt. Sie können aber ein Repository, das SSH-Authentifizierung verwendet, manuell importieren, indem Sie die Schritte unter Manuelles Importieren eines Repositorys mithilfe der Git CLI ausführen.

    Dialogfeld „Repository importieren“

Importieren in ein vorhandenes leeres Repository

Wählen Sie auf der Seite Dateien des leeren Git-Repositorys Importieren aus, und geben Sie die Klon-URL ein. Sie müssen Anmeldeinformationen angeben, wenn das Quellrepository Authentifizierung erfordert.

Importieren eines Repositorys in ein vorhandenes Repository

Hinweis

Das Importfeature deaktiviert die automatisierte Verknüpfung für Arbeitselemente, die in einem Commitkommentar erwähnt werden, da die Arbeitselement-IDs im Zielprojekt möglicherweise nicht mit denen im Quellprojekt identisch sind. Die automatische Verknüpfung für Arbeitselemente, die in einem Commit erwähnt werden, kann wieder aktiviert werden, indem Sie zu Einstellungen, Versionskontrolle navigieren, Ihr Repository auswählen und Optionen auswählen. Weitere Informationen zum Verknüpfen von Commits mit Arbeitselementen finden Sie unter Verknüpfen von Arbeitselementen mit Commits.

Manuelles Importieren eines Repositorys mithilfe der „az repos“-CLI

Sie können az repos import verwenden, um ein Repository in Ihr Azure DevOps-Projekt zu importieren.

Hinweis

Sie müssen zuerst das Repository in Azure DevOps erstellen, bevor Sie ein Git-Repository importieren können. Außerdem muss das Repository, das Sie erstellen, leer sein. Informationen zum Erstellen eines Repositorys finden Sie unter Erstellen Ihres Git-Repositorys in Azure Repos.

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

Parameter

Parameter BESCHREIBUNG
git-source-url Erforderlich. URL des zu importierenden Git-Quellrepositorys.
detect Optional. Organisation automatisch erkennen. Zulässige Werte: false, true.
git-service-endpoint-id Optional. Dienstendpunkt für die Verbindung mit einem externen Endpunkt.
org, organization Azure DevOps-Organisations-URL. Sie können die Standardorganisation mit az devops configure -d organization=<ORG_URL> konfigurieren. Erforderlich, wenn nicht als „Standard“ konfiguriert oder über „git config“ übernommen. Beispiel: https://dev.azure.com/MyOrganizationName/.
project, p Name oder ID des Projekts. Sie können das Standardprojekt mit az devops configure -d project=<NAME_OR_ID> konfigurieren. Erforderlich, wenn nicht als „Standard“ konfiguriert oder über „git config“ übernommen.
repository Name oder ID des Repositorys, in dem die Importanforderung erstellt werden soll.
requires-authorization Flag, um anzuzeigen, ob das Git-Quellrepository privat ist. Wenn Sie Authentifizierung anfordern, generieren Sie ein Authentifizierungstoken im Quellrepository, und legen Sie die Umgebungsvariable AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT auf den Wert des Tokens fest. Anschließend enthält die Importanforderung Authentifizierung.
subscription Der Name oder die ID des Abonnements. Sie können das standardmäßig verwendete Abonnement mittels az account set -s <NAME_OR_ID> konfigurieren.
user-name Anzugebender Benutzername, wenn das Git-Repository privat ist.

Beispiel

Der folgende Befehl importiert das öffentliche Repository fabrikam-open-source in das leere Git-Repository fabrikam-open-source für die Standardkonfiguration: 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"
}

Manuelles Importieren eines Repositorys mithilfe der Git-CLI

Das Feature „Repository importieren“ wurde in TFS 2017 Update 1 eingeführt. Wenn Sie TFS 2017 RTM oder niedriger verwenden, können Sie die folgenden Schritte verwenden, um ein Repository manuell in TFS zu importieren. Sie können diese Schritte auch ausführen, um ein Repository manuell in ein Azure DevOps Services-Repository zu importieren, indem Sie in den folgenden Schritten TFS durch Azure Repos ersetzen.

  1. Klonen Sie das Quellrepository mit der Option bare in einen temporären Ordner auf Ihrem Computer, wie im folgenden Befehlszeilenbeispiel gezeigt, und navigieren Sie dann zum Ordner des Repositorys. Beim Klonen mit der Option bare umfasst der Ordnername das Suffix .git. In diesem Beispiel ist https://github.com/contoso/old-contoso-repo.git das Quellrepository, das manuell importiert werden soll.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Erstellen Sie mit TFS 2017 RTM ein Zielrepository, und notieren Sie sich die Klon-URL. In diesem Beispiel ist https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo die URL für das neue Zielrepository.

  3. Führen Sie den folgenden Befehl aus, um das Quellrepository in das Zielrepository zu kopieren.

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

    Warnung

    Mithilfe von --mirror werden alle Branches im Zielrepository überschrieben. Dies schließt das Löschen aller nicht im Quellrepository enthaltenen Branches ein.

  4. Wenn das Quellrepository LFS-Objekte enthält, fetchen Sie diese, und kopieren Sie sie aus dem Quellrepository in das Zielrepository.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Löschen Sie den temporären Ordner, indem Sie die folgenden Befehle ausführen.

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

Häufig gestellte Fragen

Obwohl der Import in den meisten Fällen erfolgreich ist, können die folgenden Umstände Probleme bereiten.

Was geschieht, wenn mein Quellrepository mit Zwei-Faktor-Authentifizierung geschützt ist?

Der Importdienst verwendet REST-APIs zum Überprüfen und Auslösen des Imports und kann nicht direkt mit Repositorys arbeiten, die Zwei-Faktor-Authentifizierung erfordern. Die meisten Git-Hostinganbieter wie GitHub und Azure DevOps Services unterstützen persönliche Token, die für den Importdienst bereitgestellt werden können.

Was geschieht, wenn mein Quellrepository „multi_ack“ nicht unterstützt?

Der Importdienst verwendet während des Imports die multi_ack-Funktion des Git-Protokolls. Wenn das Quellrepository diese Funktion nicht bereitstellt, kann der Import aus der angegebenen Quelle über den Importdienst fehlschlagen. Dieser Fehler kann beim Erstellen einer Importanforderung oder während des Imports auftreten.

Kann ich aus früheren Versionen von Team Foundation Server importieren?

Wenn sich das Git-Quellrepository in einer niedrigeren TFS-Version als TFS 2017 RTM befindet, schlägt der Import fehl. Dies geschieht aufgrund eines Vertragskonflikts zwischen den neuesten Azure DevOps Services/TFS- und RTM-Versionen von TFS, die niedriger als 2017 sind.

Kann ich MSA-basierte Anmeldeinformationen verwenden?

Leider funktionieren MSA-basierte Anmeldeinformationen (Microsoft-Konto, früher Live ID) nicht. Der Importdienst basiert auf der Standardauthentifizierung, um mit dem Quellrepository zu kommunizieren. Wenn die von Ihnen verwendete Benutzername/Kennwort-Kombination nicht Standardauthentifizierung ist, schlagen sowohl die Authentifizierung als auch der Import fehl. Eine Möglichkeit, um zu überprüfen, ob die von Ihnen verwendete Benutzername/Kennwort-Kombination Standardauthentifizierung ist oder nicht, besteht darin, zu versuchen, Git zum Klonen Ihres Repositorys im folgenden Format zu verwenden.

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

Kann ich aus TFVC importieren?

Sie können Code aus einem vorhandenen TFVC-Repository zu einem neuen Git-Repository innerhalb desselben Kontos migrieren. Zwar bietet die Migration zu Git viele Vorteile, doch ist dies ein aufwendiger Prozess für große TFVC-Repositorys und -Teams. Zentralisierte Versionskontrollsysteme wie TFVC verhalten sich grundlegend anders als Git. Der Wechsel beinhaltet wesentlich mehr, als nur neue Befehle zu lernen. Es handelt sich um eine disruptive Änderung, die eine sorgfältige Planung erfordert. Weitere Informationen finden Sie unter Importieren aus TFVC in Git.

Was geschieht, wenn mein Quellrepository Git LFS-Objekte enthält?

Der Git-Import importiert keine Git LFS-Objekte.

LFS-Objekte können mithilfe der folgenden Schritte verschoben werden:

  • Importieren Sie das Repository mithilfe des Features „Repository importieren“ in Azure DevOps. Dadurch werden alle Git-Objekte aus der Quelle in Azure DevOps kopiert (dadurch werden auch die LFS Zeiger importiert, bei denen es sich um Git-Objekte handelt, aber nicht die LFS-Dateien).

So verschieben Sie die LFS-Dateien (Sie benötigen sowohl „Git.exe“ als auch den LFS-Client in derselben Box sowie Zugriff auf Quellrepository und Zielrepository).

  • Klonen Sie das importierte Repository aus Azure DevOps auf das lokale System. Klonen funktioniert, schlägt aber während des Auscheckens von LFS-Dateien fehl.
  • Fügen Sie das Quellrepository als Remoterepository (z. B. „Quelle“) hinzu.
  • Führen Sie git lfs fetch source --all aus (dadurch werden alle LFS-Dateien aus der Quelle in Ihr lokales Repository übertragen).
  • Angenommen, das VSTS-Zielrepository ist Ihr „Ziel“-Remoterepository.
  • Führen Sie git lfs push target --all aus.

Kann ich Updates importieren, wenn sich die Quelle später ändert?

Der Importdienst dient dem Erstimport eines ganzen Repositorys. Um spätere Änderungen wiederzugeben, benötigen Sie einen lokalen Klon des Repositorys, bei dem Remoterepositorys auf Quelle und Ziel festgelegt sind.

Sie können Änderungen mit den folgenden Befehlen synchronisieren. Wir behandeln den Azure Repos-Import als origin und das ursprüngliche Repository 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

Nächste Schritte