कमांड लाइन पर * शाखाओं * के लिए git auto-complete?


350

मेरी लिनक्स मशीन पर मेरे पास गिट के साथ शाखाओं के लिए स्वत: पूर्ण है ।

[ध्यान दें कि हम गिट ब्रांच के पूरा होने के बारे में बात कर रहे हैं, न कि बैश पूरा होने (जैसे कमांड्स, फाइल्स आदि) के बारे में। इस प्रकार लेन का जवाब बिल्कुल नहीं]

उदाहरण के लिए मैं git checkout+ टाइप कर सकता हूं TABऔर शाखाओं की सूची प्राप्त कर सकता हूं ।

या मैं "फैब" से शुरू होने वाली सभी शाखाओं को प्राप्त करने के लिए git checkout feb*+ टाइप कर सकता हूं TAB

मैं मैक पर यह कार्यक्षमता कैसे प्राप्त कर सकता हूं?

मैं डाउनलोड करने और चलाने का भी प्रयास bash-completion/bash_completionऔर bash-completion/bash_completion.sh.inलेकिन कोई खुशी। पहले ने त्रुटि संदेश दिया declare: -A invalid_option। दूसरे ने कोई त्रुटि नहीं दी। जब मैं git checkout+ TABहालांकि मुझे अभी भी निर्देशिका में फ़ाइलों की एक सूची मिल रही है, तो शाखाएं नहीं। मैं प्रोजेक्ट रूट में हूं।

निर्देशिका और बैश कमांड के लिए ऑटो-पूर्ण ठीक काम कर रहे हैं, इसलिए यह गिट के लिए विशिष्ट है।

जवाबों:


482

ठीक है, इसलिए मुझे गिट ऑटोकंप्लीशन स्क्रिप्ट की जरूरत थी ।

मुझे इस url से मिला:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

जब आप इसे अपने होम डाइरेक्टरी के रूप में चलाते हैं ( ~तो लक्ष्य के साथ प्रयोग किया जाता है) के बारे में चिंता करने की ज़रूरत नहीं है ।

फिर मैंने अपनी ~/.bash_profileफ़ाइल में निम्नलिखित 'निष्पादित करें यदि यह मौजूद है' कोड जोड़ा :

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

अपडेट: मैं अपनी .bashrcफ़ाइल को सिकोड़ने के लिए कोड के इन बिट्स को अधिक संक्षिप्त कर रहा हूं , इस मामले में अब मैं उपयोग करता हूं:

test -f ~/.git-completion.bash && . $_

नोट: $_पिछले कमांड के लिए अंतिम तर्क का मतलब है। तो . $_इसका मतलब है कि इसे चलाएं - " .git-completion.bashइस मामले में "

यह अभी भी उबंटू और ओएसएक्स दोनों पर और स्क्रिप्ट .git-completion.bashस्क्रिप्ट के बिना मशीनों पर काम करता है ।

अब git Tab(वास्तव में यह git TabTab) एक आकर्षण की तरह काम करता है!

पीएस: यदि यह बल्ले से काम नहीं करता है, तो आपको chmod u+x ~/.git-completion.bashअपने आप को आवश्यक अनुमति देने के लिए दौड़ना पड़ सकता है :

  • chmod वह आदेश है जो फ़ाइल अनुमतियों को संशोधित करता है
  • u इसका मतलब यह है कि उपयोगकर्ता जो फ़ाइल का मालिक है, डिफ़ॉल्ट रूप से इसका निर्माता, अर्थात आप
  • + मतलब सेट / सक्रिय / एक अनुमति जोड़ें
  • x इसका मतलब है अनुमति, यानी स्क्रिप्ट को चलाने की क्षमता

1
हां, बैश स्क्रिप्ट जोड़ने के बाद टर्मिनल को फिर से शुरू करने से यह काम हो गया। मैं यह सोच कर यहाँ बैठा था कि यह मेरे Modelsफ़ोल्डर में स्वत: पूर्ण होने का प्रयास क्यों करता रहा जब मैंने m Tabइसे स्वत: पूर्ण करने के लिए मारा master
एलेक्स

1
एक अलग टिप के लिए unix.stackexchange.com/q/48862/10043 भी देखें
माइकल ड्यूरेंट

3
यदि स्वीकृत उत्तर किसी के लिए काम नहीं कर रहा है, तो यह कोशिश करें: source ~/.bash_profileकोड चिपकाने के बाद। टर्मिनल को फिर से शुरू करना भी यही काम करेगा।
बेन

धन्यवाद! मैं कुछ अन्य सामान की कोशिश की, लेकिन कुछ भी काम नहीं किया (इस github.com/bobthecow/git-flow-completion/wiki/ ... सहित )। आपका समाधान एक आकर्षण की तरह काम करता है;)
rgoliveira

1
(आप काढ़ा नहीं है, gitलेकिन Apple डिफ़ॉल्ट git) brew install gitऔर अजीब त्रुटि का सामना कर रहे लोगों के लिए पुनरारंभ टर्मिनल जैसेgit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
सचिन

89

कुछ लोग मैक ओएस संकुल की स्थापना, अद्यतन और विन्यास को स्वचालित करने के लिए एक पैकेज प्रबंधक का उपयोग करना पसंद करते हैं। मैं पैकेज मैनेजर का प्रशंसक हूं, और मुझे लगता है कि होमब्रेव मैक ओएस के लिए सबसे अच्छा पैकेज मैनेजर है (कुछ कहेंगे कि यह डी-फैक्टो मैक ओएस पैकेज मैनेजर है)।

एक बार जब आप Homebrew स्थापित किया है, तो आप बस स्थापित कर सकते हैं Git के साथ बैश: पूर्ण करने के साथ brew install git bash-completion

फिर आपको अपने में निम्नलिखित डालना होगा ~/.bash_profile:

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(नोट: यदि यह इंस्टॉलेशन 404 त्रुटि के साथ विफल हो जाता है, और आपने पहले से ही git इंस्टॉल कर लिया है, तो बस इस ब्रू इंस्टाल के git वाले हिस्से को हटा दें)

यहाँ काढ़ा के साथ गिट और बैश-समापन स्थापित करने के बारे में अधिक जानकारी।


27
जोड़ा जा रहा है gitऔर जोड़ने bash-completionसभी एक ही में जोड़ने के रूप में नहीं है .git-completion.bash वे अलग अलग कार्यक्रमों हैं और वे काफी अलग बातें करते हैं - एक बैश आदेश स्वतः पूर्ण करता है और अन्य Git आदेश स्वतः पूर्ण और 'नायर ट्वेन को पूरा करेगा करता है;)
माइकल Durrant

एक आकर्षण की तरह काम कर, बहुत धन्यवाद। क्या आप बता सकते हैं कि मुझे मिली स्क्रिप्ट का क्या उपयोग है ~/.bash_profile?
विकास बंसल

इस उत्तर के बारे में दूसरों ने जो भी कहा है, उसके बावजूद यह वह है जिसने टर्मिनल में गिट ऑटोकॉम्पट कार्य किया है।
इयान

32

इसे टर्मिनल पर चलाएँ:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

फिर, यह करें:

vi ~/.bash_profile

इस पंक्तियों को जोड़ें:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

बस इतना ही। इसने मेरे लिए काम किया।


1
(दूसरा चरण) यदि कोई पाठ संपादक के साथ bash_profile खोलने को प्राथमिकता देता है, तो बस यह करें: open -e .bash_profile
निकोलस बोडिन-रिपर्ट

2
एक कुंवारी मैक ओएस हाई सिएरा पर, ~/.bash_profileफ़ाइल मौजूद नहीं है। यह ठीक है कि फ़ाइल बनाएं और उस ifस्क्रिप्ट को वहां रखें और सहेजें। अपने खोल को फिर से लोड करें और यह काम करेगा।
agm1984

11

gitऔर git-completion.bashपहले से ही macOS कमांड लाइन टूल्स ( xcode-select --install) के साथ आते हैं । बैश स्वचालित को सक्षम करने के लिए, इसे अपने में जोड़ें ~/.bash_profile

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

यह गिट शाखाओं के लिए स्वत: पूर्ण भी सक्षम होगा।


मुझे यकीन है कि मैंने कमांड लाइन टूल इंस्टॉल किया है, लेकिन वह फ़ाइल मेरे मामले में मौजूद नहीं है। हालांकि काढ़ा के साथ जाने में खुशी होती है (और चूंकि मेरा गिट भी काढ़ा है, शायद समझदार भी है)।
ड्रेविको

धन्यवाद! IMO, यह ग्रीन चेक मार्क के साथ उत्तर होना चाहिए।
geekisthenewcool

8

यहाँ आप में से कुछ को भ्रमित किया जा रहा है: आपके पास काढ़ा या बंदरगाह स्थापित है, लेकिन आप सिस्टम गेट का उपयोग कर रहे हैं /usr/bin/। इसे जांचने के लिए:

which git

यदि आप देखते हैं कि /usr/bin/gitया तो काढ़ा सही ढंग से कॉन्फ़िगर नहीं किया गया है, या आपने काढ़ा के माध्यम से गिट स्थापित नहीं किया है।

यदि आप काढ़ा के माध्यम से गिट स्थापित करते हैं, तो काढ़ा के लिए बैश पूर्णता को भी सक्षम करेगा, गिट के लिए बैश पूर्णता को भी सक्षम करेगा। ऐसा इसलिए है क्योंकि /usr/local/etc/bash_completionवास्तव में सब कुछ स्रोतों में /usr/local/bash_completion.d, और गिट के लिए काढ़ा पैकेज वहाँ एक पूरा होने की स्क्रिप्ट स्थापित करता है।


यह समझ में आता है, लेकिन आप "काढ़ा के लिए बैश पूर्णता कैसे सक्षम करेंगे"? आप याद कर रहे हैं कि यह कैसे करना है, यह आपके उत्तर का हिस्सा होना चाहिए
skplunkerin

मैं तो बस ऐसा किया (यह काम करता है, धन्यवाद) के माध्यम से simplified.guide/macos/bash-completion , लेकिन स्वत: पूर्ण अजीब कुछ सेकंड देरी है ...
skplunkerin

4

आप सक्षम किए गए "bash_completion" विकल्प के साथ MacPorts से बैश और गिट स्थापित कर सकते हैं। यह शायद गिट और पूर्ण अप-टू-डेट दोनों को बनाए रखने का सबसे आसान तरीका है।

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

MacPorts स्थापित करने के लिए: http://www.macports.org/install.php/

अतिरिक्त जानकारी

अपने लिनक्स सिस्टम पर पूर्ण सेटिंग्स का पता लगाने के लिए, /etc/bash_completion.d/git (यह एक लंबी फ़ाइल है) में एक नज़र है। अपने आप से प्रतिलिपि बनाना, संभवतः काम नहीं करेगा, हालांकि, इसे पूरा करने के लिए / etc / bash_completion (जो /etc/profile.d/bash_completion.sh से sourced है) / etc / प्रोफाइल में फ़ाइलों के द्वारा sourced होने के लिए डिज़ाइन किया गया है; .d को / etc / प्रोफाइल से सोर्स किया जाता है)।


2

यदि आपका git पूरा होना आंशिक रूप से टूट जाता है https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, तो सोर्सिंग के बाद भी , आपको अपने git संस्करण को अपडेट करने की आवश्यकता हो सकती है।

उदाहरण के लिए, जब मैंने git check+ टाइप किया TAB, तो यह स्वतः पूर्ण होगा git checkout। लेकिन जब मैंने git checkout+ टाइप TABकिया, तो उसने केवल शाखाओं की सूची प्रदर्शित नहीं की HEAD

मेरे लिए फिक्स अपने gitसंस्करण को अपडेट करना था । मैं 2.7.0 पर था, जो स्पष्ट रूप से नवीनतम के साथ संगत नहीं था git-completion.bash। मैं भागा brew upgrade git, जिसने इसे २.१३.० तक अद्यतन किया, और अब यह मेरी शाखा के नामों को ठीक से बताता है।


मुझे एक ही मुद्दा मिल रहा था, लेकिन मुझे दौड़ना पड़ा brew upgrade gitऔर brew link git (ओवरराइड इनेबल्ड के साथ)
Tope

1
@Tope को पकड़ने के लिए धन्यवाद। मैं बदल गया है updateकरने के लिए upgrade
वणिजब्युक

2

अब तक, मैंने इस मुद्दे को हल करने के लिए सबसे अच्छा संदर्भ स्पिनडांस पर , कॉनर लिविंगस्टन द्वारा दिया है :

यदि आपकी मशीन पर गिट-कम्प्लीटिंग.बैश स्क्रिप्ट मौजूद नहीं है, तो कृपया इसे ऊपर दिए गए लिंक से पुनर्प्राप्त करें (जो कि यह है ) और इसे अपने स्थानीय मशीन में एक नई फ़ाइल में सहेजें जिसे git-complete.bash / in कहा जाता है। usr / स्थानीय / आदि / bash_completion.d / निर्देशिका। यदि आपकी मशीन पर git-complete.bash स्क्रिप्ट मौजूद है, लेकिन /usr/local/etc/bash_completion.d/ निर्देशिका में नहीं है , तो हमें उस निर्देशिका में इसकी एक प्रति बनानी चाहिए। एक त्वरित sudo cp / current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash ट्रिक करना चाहिए। उन लोगों के लिए जो /usr/local/etc/bash_completion.d/ के बारे में उत्सुक हैं निर्देशिका: यह नए पूर्ण आदेशों को संग्रहीत करने के लिए है, और यदि आपकी मशीन पर यह पहले से मौजूद नहीं है, तो आपको इसे बनाना पड़ सकता है।

इस बिंदु पर / -rr/local/etc/bash_completion.d/ निर्देशिका में आपके स्थानीय मशीन पर git-complete.bash स्क्रिप्ट मौजूद होनी चाहिए । अब हम इसे ~ / .bash_profile से इंगित करते हुए git पूर्ण स्क्रिप्ट को bash में प्लग करेंगे ।

नोट: पिछले वाक्य में टिल्ड आपके कंप्यूटर पर होम डायरेक्टरी को संदर्भित करता है। निम्नलिखित पंक्ति को ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash पर सहेजें और सहेजें। अंतिम चरण अपने बैश प्रोफ़ाइल को फिर से लोड करना है। आप अपने वर्तमान बैश सत्र में स्रोत ~ / .bash_profile चलाकर इसे प्राप्त कर सकते हैं ।


1

कोशिश की और यह शाखाओं के लिए अच्छी तरह से काम करता है लेकिन जब आप करते हैं git st+ tabतो यह इस तरह से त्रुटि दिखाता है

अज्ञात विकल्प: - सूची- cmds = सूची-मुख्य चीनी मिट्टी के बरतन, अन्य, nohelpers, उपनाम, सूची-पूर्ण, कॉन्फ़िगर उपयोग: git [--version] [--help] [-C] [-c =] [--exec -पथ [=]] [- html-path] [--man-path] [--info- पथ] [-p | --पैगनेट | -नो-पेजर] [-नो-प्रतिस्थापित-वस्तुएं] [--bare] [--गीत-दिर =] [--वर्क-ट्री =] [--namespace =] []

इंटरनेट पर खोज की और पाया कि git के नवीनतम संस्करण --list-cmdsमें .git-completion.bashथा और मेरे मैक पर git संस्करण था2.17.2

यहाँ समाधान हैं

समाधान 1

  1. git --versionकमांड का उपयोग करके गिट के संस्करण की जांच करें
  2. फिर उसी संस्करण संख्या को url में रखें जैसा मैंने किया था

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. फिर शीर्ष उत्तर के समान चरणों का पालन करें, नीचे दिए गए कोड को डालें ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi

समाधान २

आपको नवीनतम के लिए git संस्करण को अपडेट करने का प्रयास करना चाहिए फिर इसे काम करना चाहिए।


0

ओह-माय-ज़ीश स्थापित करें और zsh को अपने डिफ़ॉल्ट शेल के रूप में सेट करें और बाद में मुझे धन्यवाद दें :)


मैंने ऐसा किया है, ठीक इससे निपटने की उम्मीद में - टैब पर टकराने के बाद भी कोई शाखा सुझाव नहीं
Jytug

आपको वास्तव में ओह-माय-ज़श , या यहां तक ​​कि किसी भी अलग प्लगइन सिस्टम की आवश्यकता नहीं है ! Git पूरा होना बॉक्स से बाहर आता है, आपको बस इसे सक्षम करना है।
सिल्वरवुल्फ

0

अधिकांश उपयोगकर्ताओं gitने xcode कमांड लाइन टूल्स के भाग के रूप में स्थापित किया होगा /usr/bin/gitऔर git के लिए बैश पूरा करने के नियम उपलब्ध होंगे /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

इस स्थिति में Homebrew या स्रोत git पूरा करने के नियमों को g.githubusercontent.com से git को स्थापित करने की आवश्यकता नहीं है। इस प्रकार केवल एक सिमलिंक बनाएं:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

नोट: सुनिश्चित करें कि आपने bash-completionHomebrew से पैकेज स्थापित और कॉन्फ़िगर किया है ।


-2

अपनी .bashrcफ़ाइल का पता लगाएँ ।

इसे खोलें और नीचे इस पंक्ति को जोड़ें:

source /etc/bash_completion.d/git


1
मेरे पास /etc/bash_completion.d/अपेक्षाकृत नए सिस्टम (OSX 10.10.3) पर कुछ भी नहीं है ।
लिवइनटेक

इसे बनाने का प्रयास करें।
crampicco

नहीं bash_completion, git_completion जो अलग अलग सामान करता है।
माइकल ड्यूरेंट

@MichaelDurrant यह काम करता है। मुझ पर विश्वास करो। ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@ क्रैम्पिको क्या आप कृपया बनाने के लिए निर्देश प्रदान कर सकते हैं /etc/bash_completion.d/git? यह आपके उत्तर को अधिक मूल्यवान बनाता है।
दानीद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.