मैं जानना चाहूंगा कि क्या यह बताने का कोई तरीका है कि कौन सी स्थानीय शाखा Git में किस दूरस्थ शाखा को ट्रैक कर रही है।
मैं एक दूरस्थ सर्वर का उपयोग कर रहा हूं, जिसे "मूल" नाम दिया गया है।
मैं जानना चाहूंगा कि क्या यह बताने का कोई तरीका है कि कौन सी स्थानीय शाखा Git में किस दूरस्थ शाखा को ट्रैक कर रही है।
मैं एक दूरस्थ सर्वर का उपयोग कर रहा हूं, जिसे "मूल" नाम दिया गया है।
जवाबों:
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
git fetch
या git pull
आपके क्लोन किए गए रिपॉजिटरी में ट्रैक किए जाएंगे। स्थानीय शाखाएं बस यही हैं, दूरस्थ शाखाओं की स्थानीय शाखाएं और इस प्रकार दूरस्थ शाखाओं को अद्यतन किया जाएगा और जब यह करने के लिए उपयुक्त आदेश दिया जाता है तो उन्हें विलय कर दिया जाएगा। मैं स्पष्ट रूप से '-t' विकल्प को शामिल करता हूं जब यह सुनिश्चित करने के लिए स्थानीय शाखा बनाते हैं कि यह उस शाखा को ट्रैक करता है जिससे यह उत्पन्न हुआ है। याद रखें कि एक स्थानीय शाखा किसी अन्य स्थानीय शाखा को भी ट्रैक कर सकती है ताकि दूरस्थ शाखा न हो।
git remote show remote-name
संदर्भ में "ट्रैक की गई" लाइनें (दूरस्थ रिपॉजिटरी से शाखाओं की स्नैपशॉट)। लाइनों स्थानीय शाखाओं एक है का उल्लेख "के साथ विलीन हो जाती है" "नदी के ऊपर शाखा" विन्यास (साथ साथ किए गए / का विकल्प Git शाखा या Git चेकआउट "पर नज़र रखने शाखाओं" के साथ है और इस तरह अक्सर भ्रमित)। --track
-t
सभी शाखाओं के लिए:
git branch -avv
केवल स्थानीय शाखाओं के लिए:
git branch -lvv
केवल दूरस्थ शाखाओं के लिए:
git branch -rvv
आपको सभी शाखाओं के साथ-साथ अपस्ट्रीम शाखा का नाम दिखाता है।
git branch -lvv
अपस्ट्रीम के साथ सिर्फ स्थानीय शाखाएँ उपयोगी हो सकती हैं
git branch -vv
मेरे लिए काम करता है ...
जेरेमी बाउस दिखाता है कि 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
प्रत्येक स्थानीय शाखा के नाम के लिए कमांड बनाने के लिए उपयोग करना होगा)।
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
किसी विशेष शाखा के लिए, आप शाखा के नाम पर या प्रत्यय के 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}
सिंटैक्स का उपयोग कर सकते हैं जहां एक प्रतिबद्ध होने की उम्मीद है।
git rev-parse --symbolic-full-name HEAD
बनाम git rev-parse --symbolic-full-name HEAD@{u}
, धन्यवाद!
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
। इकोस कुछ नहीं :(
.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/*
मुझे लूप के भीतर प्रत्येक स्थानीय शाखा के लिए संबंधित दूरस्थ शाखा (यदि कोई हो) खोजने की आवश्यकता थी जो स्थानीय शाखाओं की सूची पर काम कर रही थी। मैंने निम्नलिखित का उपयोग करके समाप्त किया:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
यह स्थानीय शाखाओं के लिए कुछ भी नहीं (एक खाली स्ट्रिंग) आउटपुट करेगा जिसमें एक समान दूरस्थ शाखा ("someremote / somebranch") नहीं है।
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
।