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