Klonen Sie ein Git-Repository mit einer bestimmten Revision

John Wachira 20 Juni 2023
Klonen Sie ein Git-Repository mit einer bestimmten Revision

Dieser Artikel beschreibt die verschiedenen Methoden, die wir anwenden können, um ein Git-Repository mit einer bestimmten Revision oder einem Änderungssatz zu klonen. Dies ist praktisch, wenn Sie ein Repository mit großen Dateien haben und nur eine bestimmte Codeversion benötigen.

Anstatt das gesamte Repository zu klonen, können Sie einen bestimmten Änderungssatz erhalten, der dazu beitragen kann, die Klonzeit zu verkürzen, insbesondere wenn Sie mit großen Dateien arbeiten.

Klonen Sie ein Git-Repository mit einer bestimmten Revision

Wir können mehrere Methoden verwenden, um ein Repository mit einem bestimmten Änderungssatz zu klonen. Beginnen wir mit der jüngsten Entwicklung in Git, die es uns ermöglicht, den Befehl git fetch mit einem interessanten Commit zu verwenden.

Vor der Git-Version 2.5.0 funktionierte git fetch origin <commit id> nicht. Mit der Veröffentlichung der Version 2.5.0 wurde Git mit der Option ausgeliefert, das uploadpack.allowReachableSHA1InWant serverseitig auf true zu konfigurieren.

Einmal auf true gesetzt, können wir jeden erreichbaren Commit abrufen. Diese Funktion ist standardmäßig deaktiviert und wird aus Sicherheits- und Leistungsgründen nicht empfohlen.

Einige Git-Server wie Bitbucket haben diese Funktion normalerweise standardmäßig aktiviert. Befolgen Sie diese Schritte, um kleine Teilmengen eines großen Git-Repositorys bei bestimmten Änderungssets abzurufen.

Wir initialisieren ein Git-Repository in dem Verzeichnis, in das wir klonen möchten.

$ git init

Wir werden dann unsere Fernbedienung zum lokalen Repo hinzufügen.

$ git remote add origin <url://to/source/repository

Wir können jetzt das gewünschte Commit abrufen, wie unten dargestellt.

$ git fetch origin <sha1-of-commit-of-interest>

Beenden Sie den Vorgang, indem Sie den Zweig auf das gewünschte Commit zurücksetzen.

$ git reset --hard FETCH_HEAD

Beachten Sie, dass dadurch der vollständige Commit-Verlauf abgerufen wird, einschließlich des angegebenen Commit. Sie können dies mit den Flags --depth=... oder --shallow-since=... einschränken.

Diese Methode ist nicht sicher und funktioniert möglicherweise nicht für alle Git-Server. Gibt es Alternativen für diese Methode, die zum selben Ziel führen?

Die Methode, die wir gleich besprechen werden, ist ideal für kleine Repositories. Es funktioniert immer noch mit großen Repositories, erfordert aber Geduld von Ihrer Seite.

Angenommen, Sie wissen bereits, von welchem Commit Sie klonen möchten, beginnen Sie damit, das gesamte Repository zu klonen.

Beginnen Sie damit, die Fernbedienung zu Ihrem lokalen Repository hinzuzufügen, und fahren Sie mit dem Klonen fort, wie unten gezeigt.

$ git clone <repo url>

Wenn Sie fertig sind, verschieben Sie HEAD mit dem Befehl git reset zum gewünschten Commit, wie unten dargestellt.

$ git reset --hard <commit id>

Wenn Sie zum letzten Commit zurückkehren möchten, führen Sie den Befehl git pull aus.

Alternativ können Sie das Repository klonen und mit dem Befehl git checkout zum gewünschten Commit wechseln, wie unten gezeigt.

$ git clone <repo url>

Um zum Commit zu wechseln:

$ git checkout <commit id>

Führen Sie den Befehl git reset im getrennten HEAD-Modus aus, wie unten gezeigt.

$ git reset --hard

Dieser Ansatz ist ideal, wenn Sie mit dem Code spielen möchten, ohne den Zweiginhalt zu ändern.

Führen Sie den Befehl git switch - aus, um den getrennten HEAD-Modus zu verlassen.

Zusammenfassend lässt sich sagen, dass einige Git-Server wie Bitbucket es uns ermöglichen, von einem erreichbaren Commit abzurufen. Sie benötigen Git Version 2.5+, um die Funktion uploadpack.allowReachableSHA1InWant nutzen zu können, mit der Sie den Befehl git fetch origin <commit-of-interest> ausführen können.

Wir haben andere Alternativen abgedeckt, die am selben Ziel ankommen.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Verwandter Artikel - Git Clone