Wie kann man einen einzelnen Zweig in git flach klonen?

9

Ich habe ein Git Repo, ich möchte eine flache Kopie machen und nur einen einzigen Zweig ziehen.

Diese SO Frage sagt, dass Git-Klon standardmäßig alle Remote-Zweige zieht. Ich würde gerne eine flache Kopie von nur einem Zweig machen.

Ich mache das für die Produktion. Ein vollständiger Checkout ist über 400 MB, aber ein git-Archiv mit Kopf ist nur 16 MB. Es scheint, dass das Verhalten des Klons beim Herunterziehen aller Zweige dazu führt, dass mein Download viel größer als nötig ist.

    
Allen Rohner 08.02.2011, 04:51
quelle

3 Antworten

4

Jakub hat bereits erwähnt seichter Klon von ausgewählten Zweigen ist möglich , aber ziemlich komplex zu tun.
Und er fügte hinzu:

  

Beachten Sie jedoch, dass, da Zweige normalerweise den größten Teil ihres Verlaufs teilen, der Gewinn durch das Klonen nur einer Teilmenge von Zweigen geringer ist als Sie denken.

Ich würde hinzufügen, dass Sie kein VCS-Tool in einer Produktionsplattform haben sollten (Sie installieren / überwachen nur, was für die Produktion notwendig ist, um run auszuführen).
So git archive bleibt der beste Weg, um genau das zu extrahieren, was Sie brauchen , als Archiv ( zip oder tar , Format, das Sie dann ohne Git verwenden können, sobald es auf der Produktionsseite übertragen wurde)

Aktualisierung März 2012:

Mit dem kommenden git1.7.10 (April 2012) können Sie tatsächlich nur einen Zweig klonen:

%Vor%

Sie können es in t5500-fetch-pack.sh sehen:

%Vor%

Diese Funktion wurde dann behoben mit:

clone --single : Begrenzen Sie den Aufruf refspec auf den abgerufenen Zweig

  

Nach der Ausführung von " git clone --single " hat das resultierende Repository den üblichen Standard " +refs/heads/*:refs/remotes/origin/* " Platzhalter fetch refspec installiert, was bedeutet, dass ein nachfolgendes " git fetch " am Ende alle anderen Zweige ergreift.

     

Aktualisiere die fetch refspec, um nur den einfach geklonten ref abzudecken, anstatt dies zu korrigieren.

builtin / clone.c: erkennt einen Klon, der korrekt bei einem Tag beginnt

  

31b808a ( gitster : limitieren Sie den Abruf refspec auf den abgerufenen Zweig, 2012-09-20) um zu sehen, ob der angegebene "Zweig" tatsächlich ein Tag im entfernten Repository ist, indem er mit " clone --single " überprüft, aber falsch verwendet refs/tags/ ; es ist aktiv falsch, einen "Zweig" " strstr(3) " zu behandeln und die Logik für " refs/heads/refs/tags/foo " zu verwenden   Ref-Hierarchie.
  Was der Code wirklich tun wollte, ist zu sehen, ob er mit " refs/tags/ " beginnt.

Update September 2016: refs/tags/ funktioniert für verkettete Tags in Git 2.11+ (Q4 2016).

    
VonC 08.02.2011 05:13
quelle
0

Sie könnten einfach einen normalen (oberflächlichen) Klon erstellen und später die überflüssigen Zweige lokal löschen (und auch die Tracking-Remote-Zweige). Sie hätten immer noch den gesamten Netzwerkverkehr, aber später ist Ihr Speicherplatz kleiner.

    
Paŭlo Ebermann 08.02.2011 23:35
quelle
0

Aktuelle Git-Versionen (ich habe v2.7.3) unterstützen flaches Klonen von nur einem Zweig durch Aufruf :

%Vor%     
sphakka 17.04.2016 17:01
quelle

Tags und Links