Comment convertir un clone peu profond de Git en un clone complet?

Réponses:

93

EDIT: git fetch --unshallow est maintenant une option (merci Jack O'Connor).

Vous pouvez exécuter git fetch --depth=1000000(en supposant que le référentiel contient moins d'un million de validations).

svick
la source
238
Maintenant qu'elle git fetch --unshallowexiste (comme dans la réponse de @ sdram), cette réponse n'est plus la meilleure.
Jack O'Connor
1
La réponse de @ sdram n'a pas fonctionné pour moi (git version 2.1.1), mais cette réponse a fonctionné.
kay - SE is evil
2
Aucune des réponses n'a fonctionné pour moi. Les deux commandes ont réussi à récupérer toutes les validations manquantes, mais lorsque j'essaie de pousser de nouvelles validations, je reçois une erreur
indiquant que
3
git fetch --depth=2147483647est la plus grande profondeur possible à fournir à la commande.
clacke
5
J'ai utilisé git fetch --unshallow, mais il ne montre toujours pas toutes les branches.
Sid
674

La commande ci-dessous (git version 1.8.3) convertira le clone superficiel en un clone normal

git fetch --unshallow

Ensuite, pour avoir accès à toutes les branches d'origine (merci @Peter dans les commentaires)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Ramkumar D
la source
36
Cela n'annule pas l'effet secondaire --single-branch. Pour ce faire, éditez .git / config et changez fetch = + refs / heads / BRANCHNAME: refs / remotes / origin / BRANCHNAME to fetch = + refs / heads / *: refs / remotes / origin / *
Peter Cordes
3
Cela ne crée pas de succursales locales qui suivent les succursales distantes, vous devez donc toujours vérifier -b BRNAME origin / BRNAME pour obtenir cette configuration.
Peter Cordes
26
Voir aussi stackoverflow.com/questions/17714159/… : à git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin partir d'une réponse, il devrait y avoir la même chose que l'édition .git / config à la main
Peter Cordes
Cela ne fonctionne que si le dépôt est marqué comme peu profond. Je ne me souviens pas comment, mais il y a des situations où vous pouvez vous retrouver avec un dépôt incomplet sans avoir explicitement fait un clone peu profond. @ svick's stackoverflow.com/a/6802238/260122 est la réponse qui fonctionne à chaque fois.
clacke
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'travaillé pour moi
gzaripov
19

J'avais besoin d'approfondir un dépôt uniquement jusqu'à un commit particulier.

Après avoir lu man git-fetch, j'ai découvert que l'on ne peut pas spécifier un commit, mais peut spécifier une date:

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

Pour ceux qui ont besoin d'approfondissement incrémental, une autre mancitation:

--deepen=<depth>

Similaire à --depth, sauf qu'il spécifie le nombre de validations à partir de la limite peu profonde actuelle au lieu de la pointe de chaque historique de branche distante.

Victor Sergienko
la source
1

Vous pouvez essayer ceci:

git fetch --update-shallow
Altynai
la source
0

Aucun des messages ci-dessus n'a fait l'affaire. J'essaie de travailler avec des balises git à partir d'un clone peu profond.

J'ai d'abord essayé

git fetch --update-shallow

quel genre de travail à mi-chemin. Pourtant, aucun tag disponible!

git fetch --depth=1000000

Cette dernière commande a vraiment récupéré les balises et j'ai finalement pu exécuter

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

et en finir avec ça.

HTH

Gen.Stack
la source
0

Deux façons d'obtenir un clone peu profond en un clone profond. :

  1. Utilisez les étapes suivantes pour télécharger la branche: (Cela télécharge la copie superficielle de la branche puis la convertit en un clone complet, c'est-à-dire apporte la branche complète et son historique).

    une. git clone -b branch http: //git.repository/customSP01.git --depth 1

Cela fait un clone peu profond (avec l'option profondeur) ne récupère qu'une seule branche (à la profondeur demandée).

b. cd customSP01
c. git fetch –depth=100
d. get fetch –depth=500
....
e. git fetch –unshallow    

// La commande ci-dessus convertira le clone superficiel en un clone normal. Cependant, cela n'apporte pas toutes les branches:

Ensuite, pour accéder à toutes les succursales.

f. git remote set-branches origin '*'

[Cette étape peut également être effectuée manuellement en modifiant la ligne suivante dans .git / config.

fetch = + refs / heads / master: refs / remotes / origin / master

à (remplacer le maître par *):

chercher = + refs / têtes / *: refs / télécommandes / origine / *]

g. git fetch -v

Cela convertit le clone peu profond en clone profond avec tous les détails de l'historique et de la branche.


  1. Vous pouvez éviter les étapes f et g, si vous utilisez la commande ci-dessous au lieu de la commande présente à l'étape a. pour faire le clone peu profond:

    git clone -b branch --no-single-branch http: //git.repository/customSP01.git --depth 1

Rajeev Ranjan
la source