Git शाखा कमांड 'कम' की तरह व्यवहार करता है


414

जब मैं git branchसभी शाखाओं को सूचीबद्ध करने के लिए कमांड का उपयोग करता हूं, तो मुझे आउटपुट दिखाई देता है git branch | less

कमांड git branchशाखाओं की एक सूची दिखाने वाली है, जैसे lsफाइलों के लिए।

यह मुझे मिलने वाला आउटपुट है:

यहां छवि विवरण दर्ज करें

मुझे डिफ़ॉल्ट व्यवहार कैसे मिलेगा git branch? पृष्ठांकित आउटपुट का क्या कारण है?

मैं के साथ ZSH का उपयोग कर रहा हूँ oh_my_zsh(वहाँ में कुछ भी नहीं के लिए), और मेरे .gitconfigइस तरह दिखता है:

[user]
  email = myemail@mail.com
  name = Dennis Haegler
[push]
  default = simple
[merge]
   tool = vimdiff
[core]
  editor = nvim
  excludesfile = /Users/dennish/.gitignore_global
[color]
  ui = true
[alias]
  br = branch
  ci = commit -v
  cam = commit -am
  co = checkout
  df = diff
  st = status
  sa = stash
  mt = mergetool
  cp = cherry-pick
  pl = pull --rebase
[difftool "sourcetree"]
  cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
  cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh 
  \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
  trustExitCode = true

जवाबों:


736

जैसा कि मार्क एडेल्सबर्गर के जवाब में टिप्पणियों में उल्लेख किया गया था, यह Git 2.16 में पेश किया गया एक डिफ़ॉल्ट व्यवहार परिवर्तन था

आप git branchडिफ़ॉल्ट pager.branchसेटिंग के साथ डिफ़ॉल्ट रूप से पृष्ठांकित आउटपुट को बंद कर सकते हैं :

git config --global pager.branch false

127
यह डिफ़ॉल्ट बनाने के लिए एक अजीब, अजीब निर्णय है। मुझे उम्मीद है कि मेरे यूनिक्स-वाई क्लि उपकरण गूंगे सरल कार्यक्रमों की तरह व्यवहार करेंगे जिन्हें आप चाहें तो चेन कर सकते हैं, लेकिन मुझे लगता है कि चर्चा दूसरी साइट के लिए है।
स्ट्रैगुलस

7
@Stragulus ध्यान दें कि नया डिफ़ॉल्ट आपको git branchकुछ और के साथ पीछा करने से नहीं रोकता है। पाइप का पता लगाने का उपयोग कर , Git शाखा सूची को कमांड के भीतर स्टडआउट करने के लिए आउटपुट करेगा git branch > branches.txtया git branch | wc -l
रोरी ओ'केन

3
@ RoryO'Kane लेकिन पेजर के साथ, मेरे पास ESC/qएक साधारण git branchजांच के बाद एक अतिरिक्त है ।
मित्न

23
@mitnk जरूरी नहीं है। यदि आपका पेजर है less, तो आप --no-init --quit-if-one-screenअपने LESSपर्यावरण चर में जोड़ सकते हैं , जिसके कारण lessपाठ को बिना स्क्रॉल किए देखा जा सकता है। man lessअधिक जानकारी के लिए देखें।
रोरी ओ'केन

13
यदि आप इसे मैन्युअल रूप से अपनी कॉन्फ़िग फ़ाइल में जोड़ना चाहते हैं, तो यह [pager] branch = false(दो लाइनों पर) है।
सैम

56

जैसा कि अन्य जवाबों में कहा गया है, गिट lessअधिकांश कमांड के लिए एक पेजर ( डिफ़ॉल्ट रूप से) में खुद को पाइप करने के लिए चूक करते हैं ।

एक महत्वपूर्ण बिंदु, हालांकि, यह है कि जब LESS का वातावरण परिवर्तनशील नहीं होता है, तो Git इसे FRX पर सेट करता है , और इसका परिणाम यह होता है कि उपयोगकर्ता-दृश्यमान व्यवहार वैसा ही होता है जैसे कि कमांड के आउटपुट कम होने पर पेजर का उपयोग नहीं किया गया था (अर्थात यदि आपके पास केवल कुछ शाखाएँ हैं)। आदमी को कम देखें :

-F या --quit-if-one-screen
कारण स्वतः ही बाहर निकलने के लिए कम हो जाता है यदि पूरी स्क्रीन को पहली स्क्रीन पर प्रदर्शित किया जा सकता है।

-R या --RAWROL-CHARS
[...] ANSI "रंग" एस्केप अनुक्रम "कच्चे" रूप में आउटपुट हैं।

-X या
--no- इनिट डिसकैप को टर्मिनल पर डीराइंड इनिशियलाइज़ेशन और डिइनिटिशिएशन स्ट्रिंग्स भेजते हैं। यह कभी-कभी वांछनीय होता है यदि विखंडन स्ट्रिंग कुछ अनावश्यक करता है, जैसे स्क्रीन को साफ़ करना।

यदि आप अपने द्वारा वर्णित व्यवहार को प्राप्त करते हैं, तो आप सबसे अधिक संभावना $LESSकुछ और के लिए निर्धारित करते हैं, और unset LESSलंबे समय तक आउटपुट के लिए "पेजर" व्यवहार रखते हुए इसे ( ) को परेशान करने से समस्या से छुटकारा मिलेगा। वैकल्पिक रूप से, आप इसे $LESSअपनी .gitconfigफ़ाइल में जोड़ते हुए व्यवहार को सक्रिय कर सकते हैं :

[core]
    pager = less -FRX

यदि आप वास्तव में पेजर चीज को नापसंद करते हैं, तो आप इसे विश्व स्तर पर या प्रति-कमांड आधार पर निष्क्रिय कर सकते हैं (अन्य उत्तर देखें)।


40

नहीं अर्थ विज्ञान का तर्क है, लेकिन व्यवहार आपको मिलने वाला है डिफ़ॉल्ट। यही कारण है कि आप इसे तब प्राप्त करते हैं जब आप कुछ अलग करने के लिए नहीं कहते हैं। डिफ़ॉल्ट रूप से, branch(और कई अन्य Git कमांड) टर्मिनल पर आउटपुट भेजते समय एक पेजर का उपयोग करते हैं।

आप --no-pagerविकल्प का उपयोग करके इस डिफ़ॉल्ट को ओवरराइड कर सकते हैं :

git --no-pager branch

या यदि आप किसी फ़ाइल में आउटपुट रीडायरेक्ट करते हैं, तो Git को पता लगाना चाहिए कि यह टर्मिनल पर नहीं लिख रहा है और इसलिए किसी पेजर का उपयोग नहीं करना चाहिए। (दूसरी तरफ, यह एक स्क्रिप्टिंग उपयोग मामले का सुझाव देता है, जिस स्थिति में आपको git for-each-refवरीयता में प्लंबिंग कमांड का उपयोग करने पर विचार करना चाहिए git branch)।


git --no-pager branchकाम करता है। लेकिन यह सेट कैसे है? केवल PAGERपर्यावरण चर के लिए सेट किया गया है less। यह डिफ़ॉल्ट व्यवहार नहीं है। मेरे सभी कॉलेजों में टर्मिनल के लिए मुद्रित सूची के रूप में एक आउटपुट है।
डेनीजेनसेन

आप किस संस्करण का उपयोग कर रहे हैं? और कौन से आपके सहकर्मी उपयोग कर रहे हैं?
लास वी। कार्लसन

2.16.0! क्या यह एक विशेषता है जिसे इस संस्करण में प्रस्तुत किया गया है?
डेनीजेनसेन

हाँ, यह अब डिफ़ॉल्ट है। github.com/git/git/blob/master/Documentation/RelNotes/... मेरे कॉलेज मेरे बगल में एक ही संस्करण का उपयोग कर और इस मुद्दे :) THX @mark नहीं है
DenniJensen

1
यह यहाँ सबसे बेहतर जवाब है, दु: खद है कि इसमें कुछ उथल-पुथल है, क्योंकि मैंने इस कृति को खोजने के लिए बहुत थोड़ा स्क्रॉल किया है।
कोडप्लब

25

यह व्यवहार मेरे लिए अधिक कष्टप्रद था। मुझे अपनी टैग सूची lessतब मिली जब मैं उदाहरण के लिए टैग सूचीबद्ध करना चाहता था।

इसके बजाय डिफ़ॉल्ट GIT PAGER को बदलकर भी इस व्यवहार को नियंत्रित किया जा सकता catहै less। मैं एक संपादक की तुलना में iTerm में स्क्रॉल करना चाहता हूं। मैं जब चाहूं संपादक का इस्तेमाल करना पसंद करता हूं।

इसलिए:

git config --global core.pager cat

1
हाँ, यह मेरे लिए एक मान्य उत्तर होना चाहिए
तुरा

2
सर उठाने के लिए धन्यवाद। मैं कुछ महीनों के उपयोग के बाद मानता हूं, मैं अभी भी बिल्ली का उपयोग कर रहा हूं, लेकिन उदाहरण के लिए जब git logयह कष्टप्रद होता है। मैं सिर्फ मूल व्यवहार को याद करता हूं, लेकिन इस समय में मेरे दैनिक वर्कफ़्लो में सुधार करने का समय नहीं था।
आयनसु

तुम जीतो! ... बिल्कुल सही!
sdlins

2
ध्यान दें कि यह इस पर भी लागू होगा git log...
बेजरार्ड

10

जो लोग ~/.gitconfigइसे ठीक करने के लिए अद्यतन करना चाहते हैं , उनके लिए यह इस तरह दिखाई देगा:

[pager]
   branch = false

यहां अजीब बात है: यह सेटिंग काम कर रही थी और कुछ दिनों से यह अब नहीं है, क्या कुछ भी बदल गया है या क्या मेरा कॉन्फ़िगरेशन अभी लागू नहीं किया जा रहा है?
ConquerorsHaki

7

Git शाखा कमांड 'कम' की तरह व्यवहार करता है

क्योंकि Git डिफ़ॉल्ट रूप से पेजर में आउटपुट को खोलता है (कम से कम उबंटू में)। स्वीकार किए जाते हैं जवाब पूरी तरह से, पेजर का स्थान ले लेगा जो आप की तरह नहीं हो सकता है, तो अपने उत्पादन बहुत लंबा है।

मैं पेजर को बदलने की सिफारिश करूंगा less, इसलिए यह टर्मिनल की ऊंचाई से कम "स्क्रॉल" आउटपुट नहीं करता है।

git config --global --replace-all core.pager "less -F -X"


2

स्वीकृत उत्तर गलत लगता है। दो समस्याएं हैं:

  1. व्यवहार वास्तव में (डिफ़ॉल्ट कॉन्फ़िगर किया गया) बैश और zsh के बीच अलग है। 'समस्या' केवल zsh के अंतर्गत दिखाई देती है।
  2. सुझाए गए समाधान git branchहमेशा एक पेजर का उपयोग नहीं करेंगे , जो कि बहुत अधिक आउटपुट होने पर वांछित नहीं होगा।

असली कारण यह है कि बैश और zsh के पास LESS के बारे में अलग-अलग डिफ़ॉल्ट परिभाषाएँ हैं: बैश कुछ भी परिभाषित नहीं करता है, जबकि zsh इसे परिभाषित करता है -R। जब मैं unset LESSzsh में करता हूं, तो सब कुछ सामान्य हो जाता है ...।

-Rव्यवहार अभी भी वांछित जा सकता है। उस स्थिति में, आप अपने निर्देश .zshrc में सब कुछ काम करने के लिए निम्न निर्देश जोड़ सकते हैं:

export LESS=-FRX

-F'यदि पूरी फ़ाइल को पहली स्क्रीन पर प्रदर्शित किया जा सकता है तो स्वतः बाहर निकलने का कारण बनता है'। हालांकि, -Xएक साथ निर्दिष्ट करने की आवश्यकता है, अन्यथा आउटपुट के एक स्क्रीनफुल से कम होने पर कोई आउटपुट नहीं दिखाया जाएगा।


0

https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

GIT_PAGER कमांड लाइन पर मल्टी-पेज आउटपुट प्रदर्शित करने के लिए उपयोग किए जाने वाले प्रोग्राम को नियंत्रित करता है। यदि यह परेशान है, तो PAGER का उपयोग कमबैक के रूप में किया जाएगा।

अपनी समस्या को हल करने के लिए, आप अपने शेल में PAGER और GIT_PAGER को खोल सकते हैं।


1
अनसेट PAGER( परेशान GIT_PAGERथा) मुद्दा अभी भी है। क्या इस env vars की जाँच करने के लिए मेरे पास कोई स्थान है?
डेनीजेनसेन

@DenniJensen आप कमांड पर पेजर को सेट कर सकते हैं जैसे PAGER= git branch(एक स्थान के बाद और बराबर कोई भी पहले लिखे गए हस्ताक्षर के बराबर नहीं)। पता नहीं, चाहे वह किसी भी जैसे की तुलना में बेहतर है, git branch | cat
महाआरती

-1

मैं के साथ एक ही समस्या है git statusऔर git config --global pager.status falseयह भी हल करती है।

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