मैं पेजर के उपयोग से 'git diff' को कैसे रोकूं?


637

क्या कोई कमांड लाइन स्विच है जो डिफ़ॉल्ट रूप git diffसे lessपेजर का उपयोग करने वाले और अन्य कमांड को पास करने के लिए है ?

मुझे पता है कि मैं इसे बिल्ली को पाइप कर सकता हूं, लेकिन यह सभी सिंटैक्स हाइलाइटिंग को हटा देता है।

मुझे पता है कि मैं वैश्विक .agerconfig में पेजर को कैट द्वारा सेट कर सकता हूं GITPAGER=cat(या ऐसा कुछ); लेकिन मैं कभी-कभी पेजर करना चाहता हूं (अंतर के आकार के आधार पर)।

लेकिन, अगर कोई एक है तो मैं कमांड लाइन स्विच पसंद करूंगा; और मैं एक को खोजने में सक्षम नहीं हूं, आदमी पृष्ठों के माध्यम से जा रहा हूं।


16
नोट: core.pager 'less -+F -+X'उन विकल्पों को हटाने के लिए एक और हालिया तरीका होगा। देखें नीचे मेरा उत्तर
VonC

"कम - + एफ - + एक्स" कष्टप्रद को दूर करने के लिए जादुई सेटिंग है ... "लंघन" ... लंबे लॉग में मार्कर। उन विकल्पों के लिए बहुत बहुत धन्यवाद, आपने मेरा दिन बचाया!
गिलोय पेरोट


का उपयोग करने पर संबंधित सवाल देखें lessGit के साथ (इस पर निर्भर भिन्न होता lessसंस्करण): unix.stackexchange.com/questions/107315/...
Pierz

जवाबों:


688

--no-pagerGit को बताएगा कि यह पेजर का उपयोग नहीं करेगा। यदि स्क्रीन में आउटपुट फिट बैठता है तो विकल्प -Fको पास lessकरना पृष्ठ को नहीं बताना होगा।

उपयोग:

git --no-pager diff

टिप्पणियों के अन्य विकल्पों में शामिल हैं:

# Set an evaporating environment variable to use 'cat' for your pager
GIT_PAGER=cat git diff

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

3
धन्यवाद, मुझे लगता है कि मैं उर्फ ​​गिट -नो-पेजर को gbc .bashrc, सही करने के लिए कह सकता हूं?
लक्ष्मण प्रसाद

42
या GIT_PAGER या PAGER पर्यावरण चर, या core.pagergit config चर का उपयोग करें।
जकूब नारबस्की

74
ध्यान रखें कि आपको अपने कमांड से पहले एडड-पेजर जोड़ना होगा , जैसे कि "git --no-पेजर लॉग --फॉर्मैट = ब्लाह"
ऐना बेट्स

6
इसके अलावा, यदि आपका टर्मिनल कम बाहर निकलने के बाद स्क्रीन को साफ करता है तो आप उपयोग करने योग्य बनाने के -Eलिए अपने lessविकल्पों में जोड़ना चाहेंगे -F
mggs

9
ध्यान दें कि यदि आप --no-pagerएक उपनाम में शामिल करना चाहते हैं , तो आपको इसके साथ कमांड को उपसर्ग करना होगा, और एक त्रुटि से बचने के लिए, आपको इस तरह से एक उपनाम बनाना होगा git config alias.foo '!git --no-pager foo':। कुछ हद तक भ्रमित। बस '--no-pager foo'काम नहीं करने के लिए उपनाम ।
जिम स्टीवर्ट

271

जैसा कि पिछले उत्तर में बताया गया है, यदि सामग्री एक स्क्रीन से कम है, तो इसे छोड़ने का -Fविकल्प पारित करना less। हालाँकि, ऐसा करने के बाद, स्क्रीन रीसेट हो जाती है, और आप अंत में सामग्री को नहीं देखते हैं।

-Xविकल्प है कि व्यवहार के साथ दूर करता है। इसलिए, मैं सामग्री की मात्रा के आधार पर सशर्त पेजिंग को सक्षम करने के लिए निम्नलिखित का उपयोग करता हूं:

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

46
नोट: मुझे git config --global --add core.pager "less -F -X"गिट में उपयोग करना था 1.8.0.2, ऊपर वाला काम नहीं करता था।
डॉगबर्ट

7
महान! इसके अलावा यह इतना न केवल Git के साथ व्यवहार करते हैं लेकिन सभी कार्यक्रमों की तरह कुछ जोड़ने बनाने के लिए export LESS="-RFX"अपने को .bashrcया.zshrc
defhlt

इसके लिए शुक्रिया; मैं एक विकल्प से ग्रस्त हो गया हूं जिसमें git आउटपुट से पहली पंक्ति को अलग कर देगा, और फिर सिंक से बाहर निकल जाएगा जैसे कि एक पंक्ति नीचे जा रही है और फिर एक पंक्ति ऊपर की ओर कब्जा करने के लिए सही की पहली पंक्ति का कारण बनेगी, सही आउटपुट से तीसरी पंक्ति के बाद। वैसे भी, इस विकल्प को निर्दिष्ट करने से उस समस्या का समाधान हो गया। इतना अजीब।
टिम हार्पर

अगर विंडोज के लिए Git का उपयोग कर रहे हैं (जो ग्रीनवुड सॉफ्टवेयर द्वारा निर्मित कम उपयोग करता है), तो आपके लिए आवश्यक पैरामीटर है -E (स्रोत: greenwoodsoftware.com/less/faq.html#dashe )
गैविन वार्ड

1
हां, जैसा कि मैंने अपने जवाब में बताया, मैं पसंद करता हूं कि पेजर शुरू होने से पहले और बाद में स्क्रीन को रीसेट न किया जाए और बाहर निकल जाए, खासकर अगर यह सब एक स्क्रीन में फिट बैठता है, जो वास्तव में यही -Xकरता है। अगर आपको यह पसंद नहीं है तो इसका इस्तेमाल न करें। मुझे यह पसंद है क्योंकि इस तरह से मैं अपने इतिहास में पिछले git कमांड के परिणाम को देखने के बिना git SHAs जैसी चीजों का उल्लेख कर सकता हूं ताकि फिर से कमांड टाइप न कर सकें। प्रत्येक अपने स्वयं के लिए।
इशाक

169

उपयोग

git config --global core.pager cat

सभी रिपॉजिटरी के लिए सभी कमांड के लिए पेजर से छुटकारा पाने के लिए।

आप pager.<cmd>इसके बजाय सेटिंग का उपयोग करके एकल Git उप-क्षेत्र के लिए पेजिंग को अक्षम core.pagerकर सकते हैं, और आप अपनी सेटिंग्स को Git रिपॉजिटरी (omit --global) में बदल सकते हैं ।

विवरण के man git-configलिए देखें और खोजें pager.<cmd>


सवाल यह नहीं था कि पेजर को पूरी तरह से कैसे निष्क्रिय किया जाए, बल्कि इसे grep subcommand के लिए कैसे अक्षम किया जाए। mtahmed का जवाब एकदम सही है।
तिलमनबाउमन

9
यह वही हो सकता है जिसे विस्तारित विवरण ने पूछा है, लेकिन यह वही है जो मैं खोज रहा था और यह शीर्ष Google परिणामों में से एक था इसलिए धन्यवाद @geekQ
ब्रायन एफ लेइटी

70

प्रलेखन में हाल के परिवर्तनों में less"डिफ़ॉल्ट विकल्प" होने के लिए एक डिफ़ॉल्ट विकल्प को हटाने के एक अलग तरीके का उल्लेख हैFRSX

इस प्रश्न के लिए, यह (git 1.8+) होगा

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

उदाहरण के लिए, डिर्क बेस्टर टिप्पणियों में सुझाव देता है :

export LESS="$LESS -FRXK" 

तो मैं साथ diff रंग का हो कि Ctrl-Cसे बाहर निकलें less

विल्सन एफ ने टिप्पणियों में और अपने प्रश्न में उल्लेख किया है कि:

कम क्षैतिज स्क्रॉलिंग का समर्थन करता है, इसलिए जब लाइनें काट दी जाती हैं, तो कम-अगर-वन-स्क्रीन को निष्क्रिय कर देता है, ताकि उपयोगकर्ता अभी भी पाठ को बाईं ओर स्क्रॉल कर देख सके कि क्या काट दिया गया था।


वे संशोधन पहले से ही git 1.8.x में दिखाई दे रहे थे, जैसा कि " हमेशा के लिए पेजर का उपयोग करेंgit diff " (टिप्पणियों को देखें) में सचित्र है । लेकिन दस्तावेज़ीकरण बस फिर से शुरू हुआ ( git 1.8.5 या 1.9, Q4 2013 के लिए )।

Git कमांड द्वारा उपयोग के लिए पाठ दर्शक (जैसे, 'कम')।
मूल्य का अर्थ शेल द्वारा व्याख्या किया जाना है।

वरीयता का क्रम है:

  • $GIT_PAGERवातावरण चर,
  • तब core.pagerकॉन्फ़िगरेशन,
  • तब $PAGER,
  • और फिर संकलन समय पर चुना गया डिफ़ॉल्ट (आमतौर पर 'कम')।

जब LESSपर्यावरण चर अप्रभावित होता है, तो Git इसे सेट करता है FRSX
(यदि LESSपर्यावरण चर सेट किया जाता है, तो Git इसे बिल्कुल नहीं बदलता है)।

यदि आप चयन के लिए Git की डिफ़ॉल्ट सेटिंग को ओवरराइड करना चाहते हैं LESS, तो आप core.pagerउदाहरण के लिए सेट कर सकते हैंless -+S
इसे गिट द्वारा शेल में पारित किया जाएगा, जो अंतिम कमांड का अनुवाद करेगा LESS=FRSX less -+S। पर्यावरण कमांड को Sलंबी लाइनों को काटने का विकल्प सेट करने के लिए कहता है लेकिन कमांड लाइन इसे लंबी लाइनों को मोड़ने के लिए डिफ़ॉल्ट रूप से रीसेट करता है।


नए दस्तावेज़ीकरण के पीछे कारण के लिए प्रतिबद्ध 97d01f2a देखें :

विन्यास: core.pagerप्रलेखन को फिर से लिखना

पाठ में उल्लेख किया गया है core.pagerऔर GIT_PAGERपूर्वता की समग्र तस्वीर दिए बिना। git var(1) प्रलेखन से बेहतर विवरण उधार लें ।

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

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


नोट: प्रतिबद्ध b327583 ( मैथ्यू मोयmoy , अप्रैल 2014, git 2.0.x / 2.1, Q3 2014 के लिए) डिफ़ॉल्ट रूप से S को हटा देगा:

पेजर: डिफ़ॉल्ट रूप से 'L' को $ LESS से हटा दें

डिफ़ॉल्ट रूप से, यदि उपयोगकर्ता द्वारा सेट नहीं किया गया था तो Git सेट $LESSकरता था। झंडे वास्तव में Git के लिए कोई मतलब ( और कभी कभी कम करने के लिए उत्पादन Git पाइप कम है, और क्योंकि क्योंकि Git पाइप रंग का उत्पादन)। झंडा (लंबी लाइनों काटना), दूसरे हाथ पर, Git से संबंधित नहीं है और उपयोगकर्ता प्राथमिकता का मामला है। उपयोगकर्ता के डिफ़ॉल्ट को बदलने के लिए Git को निर्णय नहीं लेना चाहिए-FRSX$LESS
FRXFXR
SLESS

अधिक विशेष रूप से, Sध्वज उन उपयोगकर्ताओं को हानि पहुँचाता है जो एक पेजर के भीतर अविश्वसनीय कोड की समीक्षा करते हैं, क्योंकि एक पैच जैसा दिखता है:

-old code;
+new good code; [... lots of tabs ...] malicious code;

इसके समान दिखाई देगा:

-old code;
+new good code;

पुराने व्यवहार को पसंद करने वाले उपयोगकर्ता अभी भी -FRSXस्पष्ट रूप से $ LESS वातावरण चर सेट कर सकते हैं , या core.pager को ' less -S' पर सेट कर सकते हैं ।

दस्तावेज पढ़ेंगे:

पर्यावरण Sविकल्प को निर्धारित नहीं करता है, लेकिन कमांड लाइन लंबी लाइनों को कम करने के लिए निर्देश देती है।
इसी तरह, कमांड लाइन से पर्यावरण द्वारा निर्दिष्ट विकल्प को निष्क्रिय करने के core.pagerलिए सेटिंग, के व्यवहार को निष्क्रिय कर देगा । विशेष रूप से आदेशों के लिए कुछ झंडे सक्रिय कर सकते हैं: उदाहरण के लिए, लाइन ट्रंकेशन को सक्षम करने के लिए सेटिंग ।less -+FFquit if one screenless
pager.blameless -Sgit blame


2
शुक्रिया शुक्रिया! मैं एक रास्ता खोजने के लिए रास्ता बंद करने के लिए लंबी लाइनों काट रहा है!
coredumperror

@CoreDumpError नोट: अगला Git (2.0.X या 2.1) डिफ़ॉल्ट रूप से लाइन नहीं काटेगा ! ऊपर मेरा संपादित उत्तर देखें।
वॉनसी

2
धन्यवाद। इससे मुझे यह पता चल जाता है कि मैं LESS = "$ LESS -FRXK" निर्यात करना चाहता हूं, ताकि मैं कम से छोड़े गए ctrl-c के साथ रंगीन अंतर पाऊं।
डर्क बेस्टनर

@DirkBester दिलचस्प सुझाव। मैंने इसे अधिक दृश्यता के लिए उत्तर में शामिल किया है।
वॉनक

1
@WilsonF मुझे नहीं पता, लेकिन यह एक अच्छा सवाल लगता है: क्यों इसे यहाँ छोड़ने के बजाय एक सवाल नहीं बनाया, टिप्पणियों में दफन?
वॉन सी.पी.

58

आप वैश्विक कॉन्फ़िगरेशन में विशिष्ट आउटपुट के लिए पेजर्स को अक्षम / सक्षम कर सकते हैं:

git config --global pager.diff false

या core.pager विकल्प सेट करने के लिए, बस एक खाली स्ट्रिंग प्रदान करें:

git config --global core.pager ''

catजैसा कि आप कहते हैं, इसे सेट करने की तुलना में यह मेरी राय में बेहतर है ।


यह मेरे लिए Git 1.9 पर काम किया है ... बाकी सब काम नहीं किया।
जॉर्डन बेडवेल

यह वही है जिसने मेरे लिए काम किया हैgit version 2.5.4 (Apple Git-61)
एशले कूलमैन

यह वही है जो मैं चाहता था क्योंकि अन्य कमांड पेजर को पूरी तरह से अक्षम करते हैं, लेकिन यह एकमात्र उत्तर है जो केवल git diffइसे छोड़ते समय अन्य कमांड के लिए काम करने में अक्षम करता है
एकलकरण

इस लेखन के रूप में ... विंडोज / पॉवरशेल पर मुझे मैन्युअल रूप से संपादित करना होगा code "$($env:UserProfile)\.gitconfig"और इसके pager = तहत जोड़ना होगा[core] सेटिंग्स के । उत्तर ने मेरे वर्तमान अधिकार सत्र के लिए काम किया, लेकिन सेटिंग को कहीं भी सहेजने के लिए प्रतीत नहीं हुआ, इसलिए यह अगले लॉन्च पर प्रभावी था।
कोई रिफंड नहीं

12

पाइपिंग करते समय अक्षम रंग के बारे में:

--colorरंग से अक्षम होने से बचने के लिए उपयोग करें ।

git diff --color | less -R

या उस पर मजबूर करें।

[color]
        ui = on

git diff | less -R

गैर-रंग उपकरण के लिए, फिर उपयोग करें:

git diff --no-color | some-primitive-tool

निर्यात पर्यावरण चर LESS=-R(जैसे .bashrc) "कम" में डिफ़ॉल्ट रूप से रंग समर्थन को चालू करता है:

git diff | less


2
ध्यान दें कि गिट पेजर को कॉल करते समय LESSपर्यावरण चर को सेट करेगा FRSX, अगर यह परेशान है।
टोबेब्ज

10

इसने लिनक्स पर Git संस्करण 2.1.4 के साथ मेरे लिए काम किया:

git config --global --replace-all core.pager cat

इसके catबजाय Git का उपयोग किया जाता है lesscatबस diffकिसी भी पेजिंग के बिना स्क्रीन के आउटपुट को डंप करता है ।


आम तौर पर, उत्तर बहुत अधिक सहायक होते हैं यदि वे एक स्पष्टीकरण शामिल करते हैं कि कोड क्या करने का इरादा है, और क्यों वह दूसरों को पेश किए बिना समस्या को हल करता है। (इस पोस्ट को कम से कम एक उपयोगकर्ता द्वारा चिह्नित किया गया था, संभवतः क्योंकि उन्होंने सोचा था कि स्पष्टीकरण के बिना एक उत्तर को हटा दिया जाना चाहिए।)
नाथन तुग्गी

3
@NathanTuggy मुझे लगा कि यह स्पष्ट था कि मैं पूछे गए सवाल का जवाब दे रहा था। कुछ उपयोगकर्ताओं को लगता है कि मौज-मस्ती के लिए छोटे-छोटे उत्तरों को झटकना पसंद है। मैं कुछ पाठ जोड़ दूँगा।
jcoffland

7

आप अपने स्वयं के पेजर को पेजर.लीलास के साथ अलग करने के लिए एक उपनाम जोड़ सकते हैं, जैसे:

[alias]
  dc = diff
  dsc = diff --staged
[pager]
  dc = cat
  dsc = cat

यह रंग को चालू रखेगा और 'git dc' में आह्वान करने पर पेजर के रूप में 'कैट' का उपयोग करेगा।

इसके अलावा, काम नहीं करने के लिए:

  • --no-pagerअपने उपनाम में उपयोग करें। Git (1.8.5.2, Apple Git-48) शिकायत करेगा कि आप पर्यावरण को संशोधित करने का प्रयास कर रहे हैं।
  • !shया के साथ एक खोल का उपयोग करें !git। यह ऊपर, पर्यावरण की त्रुटि को दरकिनार कर देगा, लेकिन यह आपकी कार्यशील निर्देशिका (इस आदेश के उद्देश्यों के लिए) को शीर्ष-स्तरीय गिट निर्देशिका में रीसेट कर देगा, इसलिए यदि आप पहले से ही किसी उपनिर्देशिका में हैं, तो स्थानीय फ़ाइल का कोई भी संदर्भ काम नहीं करेगा। आपका भंडार।

+1 यह तकनीक तब उपयोगी होती है जब आप इसके बाद कमिट करना चाहते हैं git logलेकिन नहीं git log --onelinepager.log = less -FXR +/^commit.*विशेष-आवरण के --onelineविकल्प के साथ alias.l1 = log --onelineऔर , का उपयोग करें pager.l1 = less -FXR
क्लाउडियो

6

मेरे पास यह हंक है .gitconfigऔर यह ठीक काम करने के लिए लगता है (डिफ्यूज़ और शो दोनों के लिए अक्षम):

[pager]
    diff = false
    show = false

4

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

git config --global --add alias.n '!git --no-pager'

या निम्नलिखित को [alias]~ / .itconfig के अनुभाग में जोड़ें:

n = !git --no-pager

इसका मतलब है कि आप nकिसी भी Git कमांड के लिए पेजिंग बंद करने के लिए उपसर्ग का उपयोग कर सकते हैं , अर्थात:

git n diff # Show the diff without pager
git n log -n 3 # Show the last three commits without pager
git n show v1.1 # Show information about a tag

2

एक त्वरित और गंदी स्क्रिप्ट के लिए, मैंने इसे लिखा, मैंने इसे इस तरह किया:

PAGER=cat git diff ...

यदि $GIT_PAGERसेट किया गया है तो यह काम नहीं करेगा । git --no-pagerवही करता है, लेकिन अधिक मज़बूती से।
मैथ्यू मोय

2

जैसा कि यह आदमी गिट पर कहता है , आप उपयोग कर सकते हैं--no-pager किसी भी कमांड पर ।

मैं इस पर उपयोग:

git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10

फिर ए का उपयोग करें लंबे आदेशों का उपयोग करने (और याद करने) से बचने के उपनाम का उपयोग करें।


2

विंडोज के लिए यह है:

git config --global core.pager ""

यह सब कुछ के लिए पेजिंग को बंद कर देगा git, जिसमें सुपर कष्टप्रद भी शामिल है git branch


लिनक्स के साथ भी काम करता है!
देहाती-देव

2

यदि आप ~/.oh-my-zsh/lib/misc.zshफ़ाइल में ओह-माय-ज़श का उपयोग करते हैं , तो इस लाइन पर टिप्पणी करें:

env_default 'LESS' '-R'

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

1
धन्यवाद, आप सही हैं। यदि ओह-माय-ज़श का उपयोग करें और एक स्थायी वैश्विक समाधान की आवश्यकता है, तो .zshrc unset LESSके अंत में जोड़ सकते हैं ।
धीमी बारिश

1

डिफ़ॉल्ट रूप से git उपयोग पेजर के रूप में कम उपयोग करता है। मैं आम तौर पर अधिक पसंद करता हूं, क्योंकि यह पहले पृष्ठ को प्रिंट करेगा और फिर आपको सामग्री के माध्यम से स्क्रॉल करने की अनुमति देगा।

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

यदि आप तब सामग्री को पाइप करना चाहते हैं, तो सब कुछ प्रिंट करने के लिए स्क्रॉल करना असुविधाजनक होगा। अधिक के साथ अच्छी बात यह है कि आप इसे पाइपलाइन के साथ जोड़ पाएंगे और यह सब कुछ, जैसे, के माध्यम से पाइप करेगा।

# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'

मूल रूप से अधिक आपको कभी भी आवश्यकता होगी, जब तक आप यह नहीं चाहते कि सामग्री कंसोल में बनी रहे। इसके बजाय अधिक उपयोग करने के लिए, नीचे के रूप में करें।

git config --global core.pager 'more'

0
git -P diff

या --no-pager

BTW: बिल्ली के साथ रंग को संरक्षित करने के लिए

git diff --color=always | cat

0

बस निर्देशों का पालन करें।

  1. बस vi ~/.gitconfigअपने टर्मिनल में टाइप करें।
  2. पेस्ट LESS="-F -X $LESS"लाइन।
  3. दबाएं :wqऔर दर्ज करें।
  4. अपने टर्मिनल को पुनरारंभ करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.