Après le clonage d'un référentiel distant, aucune branche distante n'est indiquée par l'option -a. Quel pourrait être le problème? Comment le déboguer? Dans cet extrait, deux des branches distantes ne sont pas affichées:
$ 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, ça marche 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
Essayé aussi de cloner une autre pension, ça marche bien. Bien que je puisse essayer à nouveau sur cette machine, mais il serait préférable de savoir ce qui ne va pas.
Toutes les suggestions ou suggestions seront les bienvenues.
Édition: Résumé de la réponse: Depuis la version 1.8.3.2 de Git, "--depth" et "--no-single-branch" doivent être utilisés ensemble pour obtenir le même comportement qu’auparavant. Ceci est considéré comme un correctif de bogue.
Le comportement est correct. Après la dernière révision, la branche principale (puisqu'il s'agit de la tête HEAD de la télécommande principale) est la seule branche distante du référentiel:
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
En raison de shallow-description dans la documentation technique, un "git-clone --depth 20 repo
[...] entraîne [s dans] des chaînes de validation d'une longueur maximale de 20". Un clone peu profond doit donc contenir la profondeur de commits demandée, à partir du bout d’une branche.
En outre, la documentation de git clone
pour l'option --single-branch
Décrit:
"Clone uniquement l'historique menant au sommet d'une branche unique, spécifié par l'option
--branch
Ou par les pointsHEAD
de la branche principale. lors de la création un clone peu profond avec l'option--depth
, il s'agit de la valeur par défaut, à moins que--no-single-branch
ne soit utilisé pour récupérer les historiques près des extrémités de toutes les branches. "
Par conséquent, un clone peu profond ( avec le profondeur - option) seulement va chercher seulement une seule branche (à la profondeur demandée).
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), ce qui est causé par l'histoire donnée-réécrire. Cela conduit généralement à un comportement quelque peu compliqué dans des cas particuliers.
Après avoir fait un clone peu profond, pour pouvoir vérifier les autres branches de la télécommande,
Courez (merci @jthill):
git remote set-branches Origin '*'
Après cela, faites un git fetch -v
Finalement git checkout the-branch-i-ve-been-looking-for
L'étape 1 peut également être effectuée manuellement en éditant .git/config
.
Par exemple, modifiez la ligne suivante de:
fetch = +refs/heads/master:refs/remotes/Origin/master
to (remplacer master
par *
):
fetch = +refs/heads/*:refs/remotes/Origin/*
Après avoir lu les réponses et le commentaire de @jthill, ce qui me convenait le mieux était d’utiliser le set-branches
option 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 modifie la liste des branches suivies par la télécommande nommée afin que nous puissions extraire et extraire uniquement la branche requise.