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


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

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


231
2017-08-27 01:04


मूल


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


जवाब:


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)

तो अगर मैं निम्नलिखित निष्पादित करना था:

$ 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

197
2017-08-27 03:03



तो इसका मतलब यह है कि आप कठपुतली में सभी रिमोट शाखाओं को ट्रैक कर सकते हैं हालांकि आपके पास कुछ स्थानीय शाखाएं हैं। कमांड के परिणाम में आप कितने "ट्रैक किए गए" संकेतों को देखते हैं? किस स्थानीय शाखा द्वारा "ट्रैक किया गया"? - PJ.
यदि आप करते हैं तो रिमोट शाखाओं को ट्रैक किया जाता है git fetch या git pull रिमोट शाखाओं के अपडेट आपके क्लोन भंडार में ट्रैक किए जाएंगे। स्थानीय शाखाएं बस हैं, रिमोट शाखाओं की स्थानीय शाखाएं और इस प्रकार दूरस्थ शाखाओं के लिए अपडेट ट्रैक किए जाएंगे और उचित आदेश देने के लिए विलय किया जाएगा। स्थानीय शाखा बनाने के लिए मैं स्पष्ट रूप से '-t' विकल्प शामिल करता हूं ताकि यह सुनिश्चित किया जा सके कि यह उस शाखा को ट्रैक करता है जिसकी उत्पत्ति हुई थी। याद रखें कि एक स्थानीय शाखा भी एक और स्थानीय शाखा को ट्रैक कर सकती है, इसलिए रिमोट शाखा नहीं है। - Jeremy Bouse
@ पीजे: "ट्रैक" शब्द गिट में दो अलग-अलग अर्थ हैं। में "ट्रैक" लाइनें git remote show remote-name को देखें "शाखाओं को ट्रैक करना" (दूरस्थ भंडार से शाखाओं के स्नैपशॉट)। "विलय" रेखाएं स्थानीय शाखाओं को संदर्भित करती हैं जिनमें एक है "अपस्ट्रीम शाखा" विन्यास (के साथ बनाया गया --track/-t का विकल्प गिट शाखा या गिट चेकआउट और इस प्रकार अक्सर "ट्रैकिंग शाखाओं" के साथ भ्रमित)। - Chris Johnsen
"रिमोट ट्रैकिंग शाखा"ऊपर वर्णित" ट्रैकिंग शाखाओं "के लिए अद्यतित शब्दावली प्रविष्टि है। दस्तावेज़ को अपडेट किया गया था 8b3f3f84। - ento


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

git branch -avv

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

git branch -lvv

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

git branch -rvv

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


122
2018-02-14 16:02



यह अब तक का सबसे सरल और पूर्ण उत्तर है!
गिट संस्करण 1.7.7.5 पर यह मुझे स्थानीय शाखा दिखा रहा है और शा -1 यह इंगित करता है, लेकिन यह ट्रैक की गई दूरस्थ शाखा नहीं दिखाता है ... - mpontillo
गिट संस्करण 1.7.4.1 पर मेरे लिए काम करता है दूसरा 'वी' दूरस्थ ट्रैकिंग शाखा दिखाने के लिए आवश्यक है। - Peter Johnson
उत्पादन को कम करने के लिए git branch -lvv अपस्ट्रीम के साथ केवल स्थानीय शाखाएं दिखाएं उपयोगी हो सकती हैं - A B
^git branch -vv मेरे लिये कार्य करता है... - notacouch


जेरेमी बॉउस दिखाता है किस तरह 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) टोकन में गिट 1.6.3। गिट के पुराने संस्करणों के साथ आपको ट्रैकिंग जानकारी निकालना होगा git config branch.<name>.remote तथा git config branch.<name>.merge (शायद उपयोग कर रहे हैं git for-each-ref प्रत्येक स्थानीय शाखा नाम के लिए आदेश बनाने के लिए)।


52
2017-08-27 03:18



आपके उत्तर आउटपुट का पालन करने के लिए बहुत अधिक संक्षिप्त और आसान है, इसलिए आप वोट प्राप्त करते हैं :) - CubanX
इसे कम संक्षिप्त बनाने के लिए, लेकिन यह देखने के लिए एक अच्छा तरीका प्रदान करें कि रिमोट नाम स्थानीय शाखा नामों के समान हैं, एक सामान्य गिट गोचा: बैश में git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


किसी विशेष शाखा के लिए, आप इसका उपयोग कर सकते हैं 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} सिंटैक्स जहां भी एक प्रतिबद्धता की उम्मीद है।


18
2018-05-01 09:18



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


मैं निम्नलिखित शेल स्क्रिप्ट का उपयोग करता हूं (नाम 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, लेकिन मुझे वर्तमान शाखा के आउटपुट को फ़िल्टर करने से सीधे कुछ आसान मिला।


10
2018-01-21 14:26



आप स्क्रिप्ट के शीर्ष पर "सेट-ए" का उपयोग करने पर विचार कर सकते हैं। इससे आपको "निकास $?" के सभी उदाहरणों को निकालने की अनुमति मिल जाएगी। जबकि एक ही असफल असफल व्यवहार को बनाए रखते हुए। - John Whitley
@ जॉन विटली: धन्यवाद, मैंने अपना जवाब संपादित कर लिया है। मुझे इसके बारे में मालूम है set -e, लेकिन आमतौर पर स्पष्ट जांच के लिए चिपके रहते हैं। लेकिन इस मामले में, यह वास्तव में बेहतर है। - Ingo Karkat
मेरे लिए काम नहीं कर रहा है git version 1.9.4। इकोस कुछ भी नहीं :( - Ain


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

8
2017-10-11 12:59





git branch -vv

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


5
2018-05-07 07:50





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

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





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

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

यह स्थानीय शाखाओं के लिए कुछ भी नहीं (एक खाली स्ट्रिंग) आउटपुट करेगा जिसमें संबंधित रिमोट शाखा नहीं है ("कुछ रिमोट / कुछब्रैंच")।


0
2017-11-23 00:08





प्रयत्न 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


-1
2017-08-27 01:12



वे शाखाएं दिखाते हैं, लेकिन मुझे नहीं पता कि कौन सा ट्रैकिंग कर रहा है। - PJ.