Cela signifie-t-il que vous pouvez suivre toutes les branches distantes de la marionnette bien que vous disposiez de quelques branches locales? Quels sont les nombreux signes "suivis" que vous voyez dans le résultat de la commande? "suivi" par quelle branche locale?
PJ.
Les branches isolées sont suivies en ce que si vous faites une git fetchou des git pullmises à jour aux branches à distance seront suivis dans votre dépôt cloné. Les branches locales ne sont que cela, les branches locales des branches distantes et donc les mises à jour des branches distantes seront suivies et fusionnées lorsque la commande appropriée pour le faire sera donnée. J'inclus explicitement l'option '-t' lors de la création de la branche locale afin de m'assurer qu'elle suit bien la branche d'où elle provient. N'oubliez pas qu'une branche locale peut également suivre une autre branche locale, de sorte qu'elle ne doit pas nécessairement être une branche distante.
Jeremy Bouse
5
@PJ: Le terme "piste" a deux significations distinctes dans Git. Les lignes «suivies» dans se git remote show remote-nameréfèrent à «branches de suivi» (instantanés de branches à partir de référentiels distants). Les lignes «fusionne avec» font référence aux branches locales qui ont une configuration de «branche en amont» (réalisée avec l' option --track/ -tde git branch ou de git checkout et qui est donc souvent confondue avec «suivi de branche»).
Chris Johnsen
" branche de suivi à distance " est l'entrée de glossaire à jour pour les "branches de suivi" mentionnées ci-dessus. La doc a été mise à jour dans 8b3f3f84 .
Ento
124
Pour toutes les branches:
git branch -avv
Pour les agences locales uniquement:
git branch -lvv
Pour les agences distantes uniquement:
git branch -rvv
vous montre toutes les branches ainsi que le nom de la branche en amont.
Si vous envisagez d'utiliser les informations dans un contexte automatisé (par exemple, un script), vous devez git for-each-refplutôt utiliser le niveau inférieur («plomberie») .
% git remote show origin
* remote origin
⋮
Local branches configured for 'git pull':
master merges with remote master
pu merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu
Le jeton git for-each-refappris %(upstream)dans Git 1.6.3 . Avec les versions antérieures de Git, vous devrez extraire les informations de suivi avec git config branch.<name>.remoteet git config branch.<name>.merge(probablement en utilisant git for-each-refpour construire les commandes pour chaque nom de branche locale).
Le résultat de vos réponses est beaucoup plus succinct et facile à suivre, vous obtenez donc le vote
positif
Pour le rendre moins succinct, tout en fournissant un moyen agréable de vérifier visuellement que les noms distants sont identiques aux noms des branches locales, un idiot bien connu: en bashgit for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
hobs
19
Pour une branche particulière, vous pouvez utiliser git rev-parsele suffixe @{u}ou @{upstream}le nom de la branche, par exemple:
Cela pourrait également utiliser le mentionné git for-each-ref, mais j'ai trouvé l'accès direct un peu plus simple que le filtrage de la sortie pour la branche actuelle.
Vous pourriez envisager d'utiliser "set -e" en haut du script. Cela vous permettra de supprimer toutes les instances de "|| exit $?" tout en conservant le même comportement d'échec précoce.
John Whitley
@ JohnWhitley: Merci, j'ai modifié ma réponse. Je sais à propos set -e, mais généralement s'en tenir à la vérification explicite. Mais dans ce cas, c'est vraiment mieux.
Ingo Karkat
Ne travaille pas pour moi git version 1.9.4. Echos rien :(
Ain
8
.git/config fichier fournira également les informations de branche de suivi comme
Je devais trouver la branche distante correspondante (le cas échéant) pour chaque branche locale d'une boucle agissant sur une liste des branches locales. J'ai fini par utiliser ce qui suit:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Cela ne produira rien (une chaîne vide) pour les branches locales qui n'ont pas de branche distante correspondante ("someremote / somebranch").
Réponses:
En utilisant l'exemple de ma copie de Puppet extraite du référentiel Git en amont sur Github.com ...
Alors si je devais exécuter ce qui suit:
Et enfin, relancez la
git remote show origin
commande et je verrai ensuite ce qui suit vers le bas:la source
git fetch
ou desgit pull
mises à jour aux branches à distance seront suivis dans votre dépôt cloné. Les branches locales ne sont que cela, les branches locales des branches distantes et donc les mises à jour des branches distantes seront suivies et fusionnées lorsque la commande appropriée pour le faire sera donnée. J'inclus explicitement l'option '-t' lors de la création de la branche locale afin de m'assurer qu'elle suit bien la branche d'où elle provient. N'oubliez pas qu'une branche locale peut également suivre une autre branche locale, de sorte qu'elle ne doit pas nécessairement être une branche distante.git remote show remote-name
réfèrent à «branches de suivi» (instantanés de branches à partir de référentiels distants). Les lignes «fusionne avec» font référence aux branches locales qui ont une configuration de «branche en amont» (réalisée avec l' option--track
/-t
de git branch ou de git checkout et qui est donc souvent confondue avec «suivi de branche»).Pour toutes les branches:
Pour les agences locales uniquement:
Pour les agences distantes uniquement:
vous montre toutes les branches ainsi que le nom de la branche en amont.
la source
git branch -lvv
montrent que seules les branches locales avec l'amont pourraient être utilesgit branch -vv
travaille pour moi ...Jeremy Bouse montre comment
git remote show
afficher les informations de suivi . Cela devrait suffire si vous ne souhaitez que les informations destinées à la consommation humaine.Si vous envisagez d'utiliser les informations dans un contexte automatisé (par exemple, un script), vous devez
git for-each-ref
plutôt utiliser le niveau inférieur («plomberie») .Le jeton
git for-each-ref
appris%(upstream)
dans Git 1.6.3 . Avec les versions antérieures de Git, vous devrez extraire les informations de suivi avecgit config branch.<name>.remote
etgit config branch.<name>.merge
(probablement en utilisantgit for-each-ref
pour construire les commandes pour chaque nom de branche locale).la source
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Pour une branche particulière, vous pouvez utiliser
git rev-parse
le suffixe@{u}
ou@{upstream}
le nom de la branche, par exemple:... ou pour la forme abrégée, ajouter
--abbrev-ref
Vous pouvez généralement utiliser la
branch@{upstream}
syntaxe partout où un commit est attendu.la source
git rev-parse --symbolic-full-name HEAD
vsgit rev-parse --symbolic-full-name HEAD@{u}
, merci!J'utilise le script shell suivant (nommé
git-tracks
) pour afficher la branche distante suivie par la branche actuelle:Cela pourrait également utiliser le mentionné
git for-each-ref
, mais j'ai trouvé l'accès direct un peu plus simple que le filtrage de la sortie pour la branche actuelle.la source
set -e
, mais généralement s'en tenir à la vérification explicite. Mais dans ce cas, c'est vraiment mieux.git version 1.9.4
. Echos rien :(.git/config
fichier fournira également les informations de branche de suivi commela source
montre exactement ce que vous demandez. Il montre les branches locales avec la branche distante correspondante qu'elles suivent.
la source
Ajoutez ces runes à la
[alias]
section de votre fichier .gitconfig:la source
Je devais trouver la branche distante correspondante (le cas échéant) pour chaque branche locale d'une boucle agissant sur une liste des branches locales. J'ai fini par utiliser ce qui suit:
Cela ne produira rien (une chaîne vide) pour les branches locales qui n'ont pas de branche distante correspondante ("someremote / somebranch").
la source
Essayez
git branch
avec des options :Sinon, examinez votre
.git/config
.la source