git clone simple (clone --profondeur) manque branches distantes
après avoir cloné un dépôt distant, il n'affiche aucune option branche distante par-A. Quel pourrait être le problème? Comment déboguer? Dans cet extrait, deux des branches distantes ne sont pas affichés:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
essayé la même commande sur une autre machine, il fonctionne bien:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
a essayé de cloner un autre repo, ça marche bien. Bien que je puisse l'essayer sur cette machine à nouveau, mais ce serait mieux de savoir ce qui ne va pas.
toute suggestion ou suggestion sera la bienvenue.
Edit: Réponse résumé: Depuis la version git 1.8.3.2 "--profondeur" et "--no-mono-branche" doivent être utilisés ensemble pour obtenir le même comportement qu'avant. Ceci est considéré comme une correction de bug.
3 réponses
le comportement est correct, après la dernière révision la branche maître est (puisqu'il s'agit de la tête de la télécommande primaire) la seule branche distante dans le dépôt:
florianb$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
le clone complet offre de nouvelles (toutes) branches:
florianb$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
Shallow clones
en Raison de la shallow-description dans la documentation technique, une " git-clone --depth 20 repo
[...] résultat[s dans] chaînes de commit d'une longueur maximale de 20."Un clone peu profond doit donc contenir la profondeur de propagation demandée, à partir de l'extrémité d'une branche.
comme-en outre - la documentation de git clone
pour le --single-branch
- l'option décrit:
"Cloner seulement l'histoire conduisant à l'extrémité d'une seule branche, soit spécifiée par l'option
--branch
ou par la télécommande de la branche principaleHEAD
points à. lors de la création d'un clone peu profond avec l'option--depth
, c'est la valeur par défaut, à moins que--no-single-branch
ne soit donné pour récupérer les histoires près de l'extrémité de toutes les branches. "
Donc un peu clone ( avec le profondeur -option) uniquement récupère seulement une seule branche (à votre demande profondeur.)
malheureusement les deux options ( --depth
et --single-branch
) ont été défectueuses dans le passé et l'utilisation de clones superficiels implique des problèmes non résolus (comme vous pouvez le lire dans le lien que j'ai posté ci-dessus), qui est causé par l'histoire donnée-réécrire. Cela conduit dans l'ensemble à un comportement quelque peu compliqué dans les cas spéciaux.
après avoir fait un clone peu profond, pour être en mesure de caisse d'autres branches à distance ,
-
Exécuter (merci @jthill):
git remote set-branches origin '*'
-
après cela, faites un
git fetch -v
-
enfin
git checkout the-branch-i-ve-been-looking-for
L'Étape 1 peut aussi être effectuée manuellement en l'édition .git/config
.
par exemple, changer la ligne de pliage de:
fetch = +refs/heads/master:refs/remotes/origin/master
à (remplacer master
par *
):
fetch = +refs/heads/*:refs/remotes/origin/*
en lisant les réponses et le commentaire de @jthill, la chose qui a le mieux fonctionné pour moi a été d'utiliser l'option set-branches
sur le git remote
commande:
$ git clone --depth 1 https://github.com/dogescript/dogescript.git
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name
cela change la liste des branches suivies par la télécommande nommée afin que nous puissions récupérer et vérifier seulement la branche requise.