कैसे बताएं कि कौन सी स्थानीय शाखा Git में किस दूरस्थ शाखा को ट्रैक कर रही है?


234

मैं जानना चाहूंगा कि क्या यह बताने का कोई तरीका है कि कौन सी स्थानीय शाखा Git में किस दूरस्थ शाखा को ट्रैक कर रही है।

मैं एक दूरस्थ सर्वर का उपयोग कर रहा हूं, जिसे "मूल" नाम दिया गया है।


मुझे सही है अगर मैं गलत हूँ, लेकिन यह सर्वर के बजाय डिफ़ॉल्ट रूप से मूल नाम है एक दूरस्थ शाखा नहीं है ??
क्रिस हैलक्रो

जवाबों:


196

Github.com पर अपस्ट्रीम Git रिपॉजिटरी से पपेट की मेरी कॉपी के उदाहरण का उपयोग ...

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

तब अगर मैं निम्नलिखित कार्य को अंजाम दे रहा था:

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

और अंत में फिर से git remote show originकमांड को फिर से चलाएं फिर मैं नीचे के पास नीचे देखूंगा:

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

1
तो इसका मतलब यह है कि आप कठपुतली में सभी दूरस्थ शाखाओं को ट्रैक कर सकते हैं, हालांकि आपके पास कुछ स्थानीय शाखाएं हैं। कमांड के परिणाम में आपके द्वारा देखे गए कई "संकेतित" संकेत क्या हैं? किस स्थानीय शाखा द्वारा "ट्रैक किया गया"?
पी.जे.

दूरस्थ शाखाओं को इसमें ट्रैक किया जाता है, यदि आप दूरस्थ शाखाओं में अपडेट करते हैं git fetchया git pullआपके क्लोन किए गए रिपॉजिटरी में ट्रैक किए जाएंगे। स्थानीय शाखाएं बस यही हैं, दूरस्थ शाखाओं की स्थानीय शाखाएं और इस प्रकार दूरस्थ शाखाओं को अद्यतन किया जाएगा और जब यह करने के लिए उपयुक्त आदेश दिया जाता है तो उन्हें विलय कर दिया जाएगा। मैं स्पष्ट रूप से '-t' विकल्प को शामिल करता हूं जब यह सुनिश्चित करने के लिए स्थानीय शाखा बनाते हैं कि यह उस शाखा को ट्रैक करता है जिससे यह उत्पन्न हुआ है। याद रखें कि एक स्थानीय शाखा किसी अन्य स्थानीय शाखा को भी ट्रैक कर सकती है ताकि दूरस्थ शाखा न हो।
जेरेमी बोस

5
@PJ: शब्द "ट्रैक" के गिट में दो अलग-अलग अर्थ हैं। "ट्रैकिंग शाखाओं" केgit remote show remote-name संदर्भ में "ट्रैक की गई" लाइनें (दूरस्थ रिपॉजिटरी से शाखाओं की स्नैपशॉट)। लाइनों स्थानीय शाखाओं एक है का उल्लेख "के साथ विलीन हो जाती है" "नदी के ऊपर शाखा" विन्यास (साथ साथ किए गए / का विकल्प Git शाखा या Git चेकआउट "पर नज़र रखने शाखाओं" के साथ है और इस तरह अक्सर भ्रमित)। --track-t
क्रिस जॉन्सन

" रिमोट-ट्रैकिंग शाखा " ऊपर वर्णित "ट्रैकिंग शाखाओं" के लिए अप-टू-डेट शब्दकोष प्रविष्टि है। डॉक्टर को 8b3f3f84 में अपडेट किया गया था ।
प्रवेश

124

सभी शाखाओं के लिए:

git branch -avv

केवल स्थानीय शाखाओं के लिए:

git branch -lvv

केवल दूरस्थ शाखाओं के लिए:

git branch -rvv

आपको सभी शाखाओं के साथ-साथ अपस्ट्रीम शाखा का नाम दिखाता है।


2
यह अब तक का सबसे सरल और पूर्ण उत्तर है!

6
Git संस्करण 1.7.7.5 पर यह मुझे स्थानीय शाखा और शा -1 दिखा रहा है जो इसे इंगित करता है, लेकिन यह ट्रैक की गई दूरस्थ शाखा को नहीं दिखाता है ...
MPontillo

मेरे लिए git संस्करण 1.7.4.1 पर काम करता है। दूरस्थ ट्रैकिंग शाखा को दिखाने के लिए दूसरे 'v' की आवश्यकता होती है।
पीटर जॉनसन

4
उत्पादन को कम करने के लिए git branch -lvvअपस्ट्रीम के साथ सिर्फ स्थानीय शाखाएँ उपयोगी हो सकती हैं
AB

5
^ git branch -vvमेरे लिए काम करता है ...
notacouch

52

जेरेमी बाउस दिखाता है कि git remote showट्रैकिंग जानकारी कैसे प्रदर्शित होती है । यदि आप केवल मानव उपभोग के लिए सूचना चाहते हैं तो यह पर्याप्त होना चाहिए।

यदि आप एक स्वचालित संदर्भ (जैसे एक स्क्रिप्ट) में जानकारी का उपयोग करने की योजना बनाते हैं, तो आपको git for-each-refइसके बजाय निचले स्तर ("प्लंबिंग") का उपयोग करना चाहिए ।

% 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

git for-each-refसीखा %(upstream)में टोकन Git 1.6.3 । Git के पुराने संस्करणों के साथ आपको ट्रैकिंग जानकारी को निकालना होगा git config branch.<name>.remoteऔर git config branch.<name>.merge(संभवतः git for-each-refप्रत्येक स्थानीय शाखा के नाम के लिए कमांड बनाने के लिए उपयोग करना होगा)।


आपके उत्तर आउटपुट बहुत अधिक रसीले और अनुसरण करने में आसान हैं, इसलिए आपको वोट मिल जाता है :)
CubanX

यह कम संक्षिप्त करने के लिए, लेकिन देखने में जांच करने के लिए कि दूरदराज के नाम, स्थानीय शाखा के नाम के रूप में ही एक आम Git पकड़ लिया हैं एक अच्छा तरीका प्रदान करते हैं: में bashgit for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
हॉब्स

19

किसी विशेष शाखा के लिए, आप शाखा के नाम पर या प्रत्यय के git rev-parseसाथ उपयोग कर सकते हैं , जैसे:@{u}@{upstream}

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

... या संक्षिप्त रूप के लिए, जोड़ें --abbrev-ref

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

आप आम तौर पर branch@{upstream}सिंटैक्स का उपयोग कर सकते हैं जहां एक प्रतिबद्ध होने की उम्मीद है।


1
+1 आपके जवाब ने मुझे वही दिया जिसकी मुझे ज़रूरत थी: git rev-parse --symbolic-full-name HEADबनाम git rev-parse --symbolic-full-name HEAD@{u}, धन्यवाद!
टीनो

10

git-tracksवर्तमान शाखा द्वारा ट्रैक की गई दूरस्थ शाखा को दिखाने के लिए मैं निम्नलिखित शेल स्क्रिप्ट (नाम ) का उपयोग करता हूं :

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

यह भी उल्लेख किया उपयोग कर सकते हैं git for-each-ref, लेकिन मैं वर्तमान शाखा के लिए उत्पादन को छानने की तुलना में कुछ हद तक प्रत्यक्ष पहुंच पाया।


आप स्क्रिप्ट के शीर्ष पर "सेट-ई" का उपयोग करने पर विचार कर सकते हैं। यह आपको "$ बाहर निकलें" के सभी उदाहरणों को हटाने की अनुमति देगा? उसी असफल-प्रारंभिक व्यवहार को बनाए रखते हुए।
जॉन व्हिटली

@ जॉनव्हिटली: धन्यवाद, मैंने अपना उत्तर संपादित कर दिया है। मुझे इसके बारे में पता है set -e, लेकिन आमतौर पर स्पष्ट जाँच के लिए चिपके रहते हैं। लेकिन इस मामले में, यह वास्तव में बेहतर है।
इंगो करकट

मेरे लिए काम नहीं कर रहा है git version 1.9.4। इकोस कुछ नहीं :(
ऐन

8

.git/config फ़ाइल ट्रैकिंग शाखा की जानकारी भी प्रदान करेगी

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

5
git branch -vv

जैसा आप पूछते हैं वैसा ही दिखाता है। यह स्थानीय शाखाओं को उसी दूरस्थ शाखा के साथ दिखाता है जिसे वे ट्रैक कर रहे हैं।


2

इन [alias]रूट्स को अपनी .gitconfig फ़ाइल के अनुभाग में जोड़ें :

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

0

मुझे लूप के भीतर प्रत्येक स्थानीय शाखा के लिए संबंधित दूरस्थ शाखा (यदि कोई हो) खोजने की आवश्यकता थी जो स्थानीय शाखाओं की सूची पर काम कर रही थी। मैंने निम्नलिखित का उपयोग करके समाप्त किया:

git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"

यह स्थानीय शाखाओं के लिए कुछ भी नहीं (एक खाली स्ट्रिंग) आउटपुट करेगा जिसमें एक समान दूरस्थ शाखा ("someremote / somebranch") नहीं है।


-1

git branch विकल्पों के साथ प्रयास करें :

 -r
List or delete (if used with -d) the remote-tracking branches. 

-a
List both remote-tracking branches and local branches. 

अन्यथा, अपनी जांच करें .git/config


3
वे शाखाएं दिखाते हैं, लेकिन मुझे समझ नहीं आता कि कौन सा ट्रैकिंग कर रहा है।
पी.जे.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.