Wie konvertiere ich einen flachen Git-Klon in einen vollständigen Klon?

Antworten:

92

EDIT: git fetch --unshallow Jetzt ist eine Option (danke Jack O'Connor).

Sie können ausführen git fetch --depth=1000000(vorausgesetzt, das Repository verfügt über weniger als eine Million Commits).

svick
quelle
237
Nun, da es git fetch --unshallowexistiert (wie in der Antwort von @ sdram), ist diese Antwort nicht mehr die beste.
Jack O'Connor
1
Die Antwort von @ sdram hat bei mir nicht funktioniert (Git-Version 2.1.1), aber diese Antwort hat funktioniert.
Kay - SE ist böse
2
Keine der Antworten hat bei mir funktioniert. Beide Befehle haben es geschafft, alle fehlenden Commits abzurufen, aber wenn ich versuche, neue Commits zu pushen, erhalte ich eine Fehlermeldung, dass der Server nichts über 'flache' Refs
weiß
3
git fetch --depth=2147483647ist die größtmögliche Tiefe, die dem Befehl zur Verfügung gestellt werden kann.
Clacke
5
Ich habe verwendet git fetch --unshallow, aber es zeigt immer noch nicht alle Zweige.
Sid
674

Der folgende Befehl (Git-Version 1.8.3) konvertiert den flachen Klon in einen regulären

git fetch --unshallow

Dann, um Zugriff auf alle Zweige am Ursprung zu erhalten (danke @Peter in den Kommentaren)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Ramkumar D.
quelle
36
Dies macht den Nebeneffekt --single-branch nicht rückgängig. Bearbeiten Sie dazu .git / config und ändern Sie fetch = + refs / Heads / BRANCHNAME: refs / remotes / origin / BRANCHNAME, um = + refs / Heads / *: refs / remotes / origin / * zu holen
Peter Cordes
3
Dadurch werden keine lokalen Zweige erstellt, die die entfernten Zweige verfolgen. Sie müssen also noch -b BRNAME origin / BRNAME auschecken, um diese Einrichtung zu erhalten.
Peter Cordes
25
Siehe auch stackoverflow.com/questions/17714159/… : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin Von einer Antwort sollte es dasselbe geben wie das Bearbeiten von .git / config von Hand
Peter Cordes
Dies funktioniert nur, wenn das Repo als flach markiert ist. Ich kann mich nicht erinnern, wie, aber es gibt Situationen, in denen Sie ein unvollständiges Repo erhalten können, ohne explizit einen flachen Klon erstellt zu haben. @ svicks stackoverflow.com/a/6802238/260122 ist die Antwort, die jedes Mal funktioniert.
Clacke
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'arbeitete für mich
gzaripov
19

Ich musste ein Repo nur auf ein bestimmtes Commit vertiefen.

Nach dem Lesen man git-fetchstellte ich fest, dass man kein Commit angeben kann, aber ein Datum angeben kann:

git fetch --shallow-since=15/11/2012

Für diejenigen, die eine schrittweise Vertiefung benötigen, ein weiteres manZitat:

--deepen=<depth>

Ähnlich wie --depth, außer dass die Anzahl der Commits von der aktuellen flachen Grenze anstelle von der Spitze jedes Remote-Zweigverlaufs angegeben wird.

Victor Sergienko
quelle
1

Sie können dies versuchen:

git fetch --update-shallow
Altynai
quelle
0

Keine der oben genannten Nachrichten hat den Trick getan. Ich versuche mit Git-Tags zu arbeiten, die von einem flachen Klon ausgehen.

Zuerst habe ich es versucht

git fetch --update-shallow

welche Art von auf halbem Weg gearbeitet. Es sind jedoch keine Tags verfügbar!

git fetch --depth=1000000

Dieser letzte Befehl hat die Tags wirklich abgerufen und ich konnte sie endlich ausführen

git checkout -b master-v1.1.0 tags/v1.1.0

und damit fertig sein.

HTH

Gen.Stack
quelle