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


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

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.


1

Sie können dies versuchen:

git fetch --update-shallow

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.