J'aimerais savoir s'il existe un moyen de savoir quelle branche locale suit quelle branche distante dans Git.
J'utilise un serveur distant nommé "origine".
J'aimerais savoir s'il existe un moyen de savoir quelle branche locale suit quelle branche distante dans Git.
J'utilise un serveur distant nommé "origine".
Réponses:
En utilisant l'exemple de ma copie de Puppet extraite du référentiel Git en amont sur Github.com ...
$ git remote show origin
* remote origin
Fetch URL: git://github.com/reductivelabs/puppet.git
Push URL: git://github.com/reductivelabs/puppet.git
HEAD branch: master
Remote branches:
0.24.x tracked
0.25.x tracked
2.6.x tracked
master tracked
next tracked
primordial-ooze tracked
reins-on-a-horse tracked
testing tracked
testing-17-march tracked
testing-18-march tracked
testing-2-april tracked
testing-2-april-midday tracked
testing-20-march tracked
testing-21-march tracked
testing-24-march tracked
testing-26-march tracked
testing-29-march tracked
testing-31-march tracked
testing-5-april tracked
testing-9-april tracked
testing4268 tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Alors si je devais exécuter ce qui suit:
$ git checkout -b local_2.6 -t origin/2.6.x
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'
Et enfin, relancez la git remote show origin
commande et je verrai ensuite ce qui suit vers le bas:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
ou des git 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:
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.
git branch -lvv
montrent que seules les branches locales avec l'amont pourraient être utiles
git 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») .
% 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-ref
appris %(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>.remote
et git config branch.<name>.merge
(probablement en utilisant git for-each-ref
pour construire les commandes pour chaque nom de branche locale).
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:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... ou pour la forme abrégée, ajouter --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
Vous pouvez généralement utiliser la branch@{upstream}
syntaxe partout où un commit est attendu.
git rev-parse --symbolic-full-name HEAD
vs git 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:
#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}
echo "${remote:?}/${remoteBranch:?}"
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.
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 comme
[remote "Hub"]
url = ssh://xxxx/tmp/Hub
fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
remote = Hub
merge = refs/heads/develop
[branch "Dev1"]
remote = Test
merge = refs/heads/Dev1
[remote "Test"]
url = ssh://xxxx/tmp/gittesting/Dev1GIT
fetch = +refs/heads/*:refs/remotes/Test/*
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").
Essayez git branch
avec des options :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Sinon, examinez votre .git/config
.