Wie verwende ich Git, um nur die neueste Version eines Projekts zu erhalten?

Lesezeit: 3 Minuten

Benutzer-Avatar
jut

Ich möchte nicht das gesamte Repository klonen und ich werde keine Patches einreichen. Ich möchte in Zukunft problemlos neue Revisionen erhalten.

Ich habe versucht, mit git cloneaber dies erstellt eine Kopie des gesamten Repositorys (riesige Dateigröße) und das Nachverfolgen von Änderungen macht den Speicherplatz noch größer (100 MB an Dateien nehmen jetzt über 2 GB ein).

Ist das möglich?

  • Git 1.9/2.0 (Q1 2014) wird mit flachem Klonen viel effizienter sein: stackoverflow.com/a/21217267/6309 und stackoverflow.com/a/21217326/6309

    – VonC

    19. Januar 2014 um 13:28 Uhr

Benutzer-Avatar
Greg Hewgill

Verwenden git clone mit dem --depth Option eingestellt auf 1 um einen flachen Klon mit einem Verlauf zu erstellen, der auf den letzten Commit gekürzt ist.

Zum Beispiel:

git clone --depth 1 https://github.com/user/repo.git

Um auch verschachtelte Submodule zu initialisieren und zu aktualisieren, pass auch --recurse-submodules und um sie oberflächlich zu klonen, pass auch --shallow-submodules.

Zum Beispiel:

git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/user/repo.git

  • Beispiel: git clone --depth=1 <remote_repo_url>

    – iDev247

    15. Januar 2013 um 23:01 Uhr


  • Seit Übertrage 82fba2b in git 1.9 gibt es diese einschränkungen nicht mehr.

    – niutech

    5. März 2014 um 13:26 Uhr


  • Welche Einschränkungen?

    – Ignorant

    11. September 2016 um 10:38 Uhr

  • @Triangles: Einschränkungen (nicht mehr aktuell): Ein flaches Repository hat eine Reihe von Einschränkungen (Sie können es nicht klonen oder abrufen, weder von noch hineinschieben), aber es ist angemessen, wenn Sie nur an der jüngsten Geschichte eines großen interessiert sind Projekt mit einer langen Historie und möchte Korrekturen als Patches einsenden.

    – Odinho-Velmont

    14. September 2016 um 9:54 Uhr

  • Die Option wurde hinzugefügt git 1.8.4.

    – ivan_pozdeev

    24. Dezember 2017 um 15:35 Uhr

Alternative Lösung zum Ausführen von flachem Klonen (git clone --depth=1 <URL>) wäre, wenn die Gegenseite es unterstützt, zu verwenden --remote Option von git-Archiv:

$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

Oder, wenn das betreffende entfernte Repository mit einigen durchsucht werden kann Webinterface wie gitweb oder GitHub, dann besteht die Möglichkeit, dass es über eine Snapshot-Funktion verfügt und Sie die neueste Version (ohne Versionsinformationen) von der Webschnittstelle herunterladen können.

  • Diese Lösung wird diese Anforderung jedoch nicht erfüllen: “Ich möchte in der Lage sein, auf neue Revisionen des Remote-Projekts zu aktualisieren”. Da es im Grunde genommen das Archiv herunterlädt, wird es nicht in der Lage sein, ein oder zwei Commits schnell voranzutreiben. “Shallow clone” erlaubt das. Trotzdem denke ich, dass diese Lösung ihre Anwendungsfälle hat, also erwähnenswert.

    – Wassilij Nowikow

    19. September 2017 um 22:21 Uhr


Benutzer-Avatar
Erzähler des Chaos

Heutzutage, flache Klone werden in den meisten Fällen nicht empfohlen.

Während für den von Ihnen erwähnten Anwendungsfall (laden Sie die neueste Version herunter und berühren Sie sie nie wieder) git clone --depth=1 funktioniert, im allgemeineren Fall kann es zu Problemen kommen. Wenn Sie beispielsweise Ihren Klon mit Upstream auf dem neuesten Stand halten möchten, git fetch ist bei einem flachen Klon viel teurer.

Wenn Sie weniger Daten herunterladen möchten, sind Teilklone für den allgemeinen Fall besser:

git clone --filter=tree:0 <url>

Dadurch wird immer noch der Commit-Verlauf heruntergeladen, aber es werden keine Dateibäume und Dateiinhalte für frühere Commits heruntergeladen. Abrufe von Upstream-Commits sind immer noch billig.

  • Gute Infos! Erwähnenswert ist, dass der Autor des verlinkten Artikels angibt, dass er “dringend empfohlen dass Entwickler keine baumlosen Klone für ihre tägliche Arbeit verwenden.” Verwenden Sie stattdessen bloblose Klone: git clone --filter=blob:none <url>

    – Bernhof

    14. Dezember 2021 um 19:00 Uhr


  • Es ist auch erwähnenswert, dass die Filteroption möglicherweise nicht auf Ihrem Server verfügbar ist (wie es in meinem Fall mit Gerrit der Fall war).

    – Oleksii Karnatskyi

    11. März um 9:51 Uhr

1018090cookie-checkWie verwende ich Git, um nur die neueste Version eines Projekts zu erhalten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy