Après le clonage d'un référentiel distant, il n'affiche aucune branche distante par l'option -a. Quel pourrait être le problème? Comment le déboguer? Dans cet extrait de code, 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
J'ai essayé la même commande sur une autre machine, cela 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
J'ai également essayé de cloner un autre repo, cela fonctionne bien. Bien que je puisse l'essayer à nouveau sur cette machine, il serait préférable de savoir ce qui ne va pas.
Toutes suggestions ou astuces seront les bienvenues.
Edit: Résumé de la réponse: Depuis la version 1.8.3.2 de git, les "--depth" et "--no-single-branch" doivent être utilisés ensemble pour obtenir le même comportement qu'avant. Ceci est considéré comme une correction de bogue.
la source
master
est votre succursale locale.remotes/origin/master
est la branche distante correspondante. Quelle est exactement la question?git branch -avv
git clone --depth=1 --no-single-branch
, c'est ce dont j'ai besoin dans la plupart des cas.Réponses:
Le comportement est correct, après la dernière révision, la branche master est (puisqu'il s'agit de la HEAD de la télécommande principale) la seule branche distante du référentiel:
Le clone complet offre de nouvelles (toutes) branches:
Clones peu profonds
En raison de la description superficielle de la documentation technique, un "
git-clone --depth 20 repo
[...] résultat [s dans] des chaînes de validation d'une longueur d'au plus 20". Un clone peu profond doit donc contenir la profondeur de commits demandée, à partir de l'extrémité d'une branche.Comme - en plus - la documentation de
git clone
pour l'--single-branch
option -décrit:Par conséquent, un clone peu profond ( avec l' option de profondeur ) ne récupère qu'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 peu profonds implique des problèmes non résolus (comme vous pouvez le lire dans le lien que j'ai posté ci-dessus), qui sont causés par la réécriture d'historique donnée. Cela conduit globalement à un comportement quelque peu compliqué dans des cas particuliers.la source
fetch = +refs/heads/*:refs/remotes/origin/*
-à- dire et en exécutantgit fetch --depth 1
(sans--tags
). Nous pouvons également ajouter des balises spécifiques à récupérer, en utilisant une configuration similaire àfetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.Après avoir fait un clone superficiel, pour pouvoir vérifier d'autres branches à distance ,
Exécutez (merci @jthill):
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:
à (remplacer
master
par*
):la source
git remote set-branches origin '*'
pour toutes les branches, remplacer le*
par un nom de branche pour une.-vvv
signifie dansgit fetch -vvv
? Je n'ai trouvé aucune information à ce sujet dans git-fetch docverbosity
oudebug
degit
. Ce n'est pas parfetch
méthode.Après avoir lu les réponses et le commentaire de @jthill, la chose qui fonctionnait le mieux pour moi était d'utiliser l'
set-branches
option sur lagit remote
commande:Cela modifie la liste des branches suivies par la télécommande nommée afin que nous puissions récupérer et extraire uniquement la branche requise.
la source
git remote set-branches --add origin 'remote_branch_name'
pour que la nouvelle branche soit en plus de celles existantes, plutôt que de les remplacer dans la liste des branches distantes (ou des modèles de branche) à récupérer dans le fichier .git / config.'
est important dansgit remote set-branches --add origin 'remote_branch_name'