Vraag Hoe weet je welk lokaal filiaal de remote branch in Git volgt?


Ik zou graag willen weten of er een manier is om te vertellen welke lokale branch welke remote branch in Git volgt.

Ik gebruik één externe server, die de naam "oorsprong" heeft.


231
2017-08-27 01:04


oorsprong


Corrigeer me als ik het mis heb, maar is het geen remote branch die standaard de naam origin heeft in plaats van de server ?? - Chris Halcrow


antwoorden:


Het voorbeeld van mijn exemplaar van Puppet gebruiken dat is uitgecheckt uit de upstream Git-repository op 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)

Als ik dan het volgende zou uitvoeren:

$ 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'

En ten slotte opnieuw uitvoeren van de git remote show origin opnieuw commando, dan zie ik het volgende onderaan onderaan:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

197
2017-08-27 03:03



Dit betekent dat je alle remote branches in Puppet kunt volgen, hoewel je een paar lokale vestigingen hebt. Wat betekenen de vele "bijgehouden" tekens in het resultaat van het commando? "gevolgd" door welke lokale vestiging? - PJ.
De remote branches worden bijgehouden als je dat doet git fetch of git pull updates voor de remote branches worden bijgehouden in uw gekloonde repository. De lokale vestigingen zijn slechts dat, lokale vertakkingen van de remote branches en dus updates van de remote branches zullen worden gevolgd en samengevoegd wanneer het juiste commando om dit te doen wordt gegeven. Ik neem expliciet de optie '-t' op bij het maken van de lokale vertakking om ervoor te zorgen dat de tak wordt bijgehouden waaruit deze is ontstaan. Onthoud dat een lokale vestiging ook een andere lokale branch kan volgen, dus dit hoeft geen remote branch te zijn. - Jeremy Bouse
@PJ: de term "track" heeft twee verschillende betekenissen in Git. De "bijgehouden" regels in git remote show remote-nameverwijzen naar "Takken volgen" (snapshots van takken van externe repositories). De regels 'samenvoegen met' verwijzen naar lokale vestigingen met een "Stroomopwaartse tak" configuratie (gemaakt met met de --track/-t optie van git branch of git uitchecken en dus vaak verward met "tracking-takken"). - Chris Johnsen
"remote tracking-afdeling"is de actuele verklarende woordenlijst voor" tracking branches "hierboven vermeld 8b3f3f84. - ento


Voor alle takken:

git branch -avv

Alleen voor lokale vestigingen:

git branch -lvv

Alleen voor externe vestigingen:

git branch -rvv

laat je alle branches zien evenals de naam van de upstream branch.


122
2018-02-14 16:02



Dit is veruit het eenvoudigste en meest volledige antwoord!
Op git versie 1.7.7.5 laat dit me de lokale branch zien en de sha-1 waarnaar het verwijst, maar het toont niet de bijgehouden remote branch ... - mpontillo
Werkt voor mij op git-versie 1.7.4.1 De tweede 'v' is vereist om de remote tracking-tak te tonen. - Peter Johnson
om de output te verminderen git branch -lvv toon alleen lokale vestigingen met stroomopwaarts kan nuttig zijn - A B
^git branch -vv werkt voor mij... - notacouch


Jeremy Bouse illustreert dit hoe git remote show geeft trackinginformatie weer. Dat zou voldoende moeten zijn als u alleen de informatie voor menselijke consumptie wilt.

Als u van plan bent de informatie in een geautomatiseerde context (bijvoorbeeld een script) te gebruiken, moet u het lagere niveau ("sanitair") gebruiken git for-each-ref in plaats daarvan.

% 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

De git for-each-ref leerde het %(upstream) token in Git 1.6.3. Met eerdere versies van Git zul je de trackinginformatie moeten extraheren git config branch.<name>.remote en git config branch.<name>.merge (waarschijnlijk gebruik git for-each-ref om de commando's voor elke lokale filiaalnaam te bouwen).


52
2017-08-27 03:18



De output van uw antwoorden is veel beknopter en gemakkelijker te volgen, dus u krijgt de hogere stem :) - CubanX
Om het minder beknopt te maken, maar een mooie manier om visueel te controleren dat namen op afstand hetzelfde zijn als de namen van de plaatselijke filialen, is dit een algemene git gotcha: in bash git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


Voor een bepaald filiaal kunt u gebruiken git rev-parse met de @{u} of @{upstream} achtervoegsel op de filternaam, bijvoorbeeld:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

... of voor de verkorte vorm, voeg toe --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

U kunt over het algemeen de branch@{upstream} syntaxis, overal waar een commit wordt verwacht.


18
2018-05-01 09:18



+1 Je antwoord gaf me precies wat ik nodig had: git rev-parse --symbolic-full-name HEAD vs. git rev-parse --symbolic-full-name HEAD@{u}, bedankt! - Tino


Ik gebruik het volgende shellscript (named git-tracks) om de externe vertakking weer te geven die wordt bijgehouden door de huidige vertakking:

#!/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:?}"

Dit kan ook het genoemde gebruiken git for-each-ref, maar ik vond de directe toegang iets eenvoudiger dan het filteren van de uitvoer voor de huidige tak.


10
2018-01-21 14:26



U zou kunnen overwegen om "set -e" bovenaan het script te gebruiken. Op die manier kunt u alle instanties van "|| exit $?" Verwijderen. met behoud van hetzelfde mislukking-vroege gedrag. - John Whitley
@JohnWhitley: Bedankt, ik heb mijn antwoord bewerkt. ik weet over set -e, maar houd u meestal aan de expliciete controle. Maar in dit geval is het echt beter. - Ingo Karkat
Werkt niet voor mij git version 1.9.4. Echos niets :( - Ain


.git/config bestand geeft ook de tracking branch info als

[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/*

8
2017-10-11 12:59





git branch -vv

laat precies zien waar je om vraagt. Het toont de lokale vestigingen samen met de corresponderende remote branch die ze volgen.


5
2018-05-07 07:50





Voeg deze runen toe aan de [alias] gedeelte van uw .gitconfig-bestand:

show-tracking = !sh -c 'git ls-remote . |grep `git log -1 --grep="git-svn-id" --format=%H`|perl -pe "s/[[:alnum:]]+[[:space:]]//"'

2
2018-03-07 16:48