मुझे लंबी लाइनों के लिए गिट भिन्न का उपयोग कैसे करना चाहिए?


235

मैं एक फ़ाइल पर git-diff चला रहा हूं , लेकिन परिवर्तन एक लंबी लाइन के अंत में है।

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

वहाँ एक तरीका है कि समस्या को रोकने के लिए या बस लाइनों लपेटो बनाने के लिए है?

मैं git 1.5 को mingw32 के माध्यम से चला रहा हूं।


6
आप 'git diff --color-words' आज़माना चाह सकते हैं, यह स्क्रॉलिंग समस्या को हल नहीं करता है, लेकिन शब्द परिवर्तन एक लाइन पर संदर्भ से घिरा हुआ है!
केविनफ

7
"फोल्ड" का उपयोग करना बहुत अच्छी तरह से काम करता है:git diff --color-words | fold
एमी

@ मैं का उपयोग करने की कोशिश की है, foldलेकिन यह रंग निकालता है। चूंकि आप निर्दिष्ट करते हैं कि --color-wordsमैं मानता हूं कि आप रंगों को पास करने में कामयाब रहे fold। कैसे?
नीरो ग्रिस

जवाबों:


120

आउटपुट का प्रदर्शन git diffआपके द्वारा उपयोग किए जा रहे पेजर द्वारा नियंत्रित किया जाता है।

आमतौर पर, लिनक्स के तहत, lessइस्तेमाल किया जाएगा।

आप GIT_PAGERवातावरण चर सेट करके एक अलग पेजर का उपयोग करने के लिए गिट बता सकते हैं । यदि आप पेजिंग के बारे में बुरा नहीं मानते हैं (उदाहरण के लिए, आपका टर्मिनल आपको वापस स्क्रॉल करने की अनुमति देता है) तो आप GIT_PAGERपेजर का उपयोग कर इसे रोकने के लिए खाली करने की कोशिश कर सकते हैं । लिनक्स के तहत:

$ GIT_PAGER='' git diff

पेजर के बिना, लाइनें लपेटेंगी।

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

$ GIT_PAGER='' git diff --no-color

1
मैं पुष्टि कर सकता हूँ कि GIT_PAGER को रिक्त करने के लिए लाइनें लपेटने का कारण बनता है। यह प्रतीकों को पढ़ना भी कठिन बनाता है, लेकिन यदि आवश्यक हो तो मुझे एक अलग पेजर मिल सकता है, इसलिए अभी भी एक मान्य उत्तर है। :) धन्यवाद।
पीटर बॉटन

1
यह किन प्रतीकों को जोड़ता है जिससे इसे पढ़ना मुश्किल हो जाता है? मैं उस समस्या को हल करने के लिए अपने उत्तर को संपादित करने में सक्षम हो सकता हूं।
स्पूनमाइजर

प्रत्येक नईलाइन के लिए अधिकतर "<- [m" (जहां <- एक एकल तीर वर्ण था), लेकिन यह भी मार्कर जहां (मुझे लगता है) प्रत्येक रंग शुरू हो गया होगा, जैसे "<- [1m" और "<- [32m"।
पीटर बॉटन

1
क्या -कोई-रंग तर्क बिल्कुल मदद नहीं करता है? मैं newline वर्णों के बारे में निश्चित नहीं हूं।
स्पूनमाइजर

हां, धन्यवाद, जो सभी अवांछित सामग्री को प्रदर्शित होने से रोकता है, इसलिए नईलाइन रंग से संबंधित होनी चाहिए।
पीटर बॉटन

229

या यदि आप डिफॉल्ट पेजर के रूप में कम का उपयोग -Sकरते हैं, तो रेनेबल रैपिंग के लिए कम में अंतर को देखते हुए टाइप करें ।


60
संबंधित टिप, --word-diffबदले हुए शब्दों का रंग-कोडित हाइलाइटिंग देखने के लिए उपयोग करें
जोश डाइहाल

5
बस इसके लिए एक नोट जब से मैंने देखा कि कुछ लोग इसके साथ समस्या कर रहे थे, -S अलग है -s (सुनिश्चित करें कि आप शिफ्ट + एस मार रहे हैं)
longda

2
@ जोशीलेह: मुझे आशा है कि आपको कोई आपत्ति नहीं है ... मुझे लगता है कि इस --word-diffहिस्से पर इसका खुद का जवाब होना चाहिए, क्योंकि यह मुझे अंतर्निहित मुद्दे को सुलझाने में मदद करने के लिए बहुत कुछ करता है: यह पता लगाना कि लंबी लाइन में क्या बदला है। इसलिए, मैंने इसे एक बना दिया है: stackoverflow.com/a/19253759/313756
16:57 को

1
नोट: यह OS X (mavericks) पर काम नहीं करता है।
दिल्लोमेट्रिक्स

@zhermes यह मेरे लिए Mavericks में काम करता है, कम 418 के साथ। सुनिश्चित करें कि आप -Sएक पूंजी एस के साथ टाइप कर रहे हैं , नहीं -s। मेरे द्वारा टाइप करने के बाद नीचे एक संदेश "लंबी लाइनों को दबाएं (RETURN)" को प्रदर्शित करता है -S, और फिर रिटर्न को दबाने से रैपिंग सक्षम हो जाती है।
रोरी ओ'केन

115

git configरैप करने के लिए आप सेटअप पेजर का भी उपयोग कर सकते हैं ।

$ git config core.pager 'less -r' 

वर्तमान परियोजना के लिए पेजर सेटिंग सेट करता है।

$ git config --global core.pager 'less -r' 

सभी परियोजनाओं के लिए विश्व स्तर पर पेजर सेट करता है


3
msysgit (1.8.1.msysgit.1) के साथ इसने मेरे लिए दोहरे उद्धरण चिह्नों का उपयोग करके काम किया -git config --global core.pager "less -r"
kerim

यह मुझे ओएस एक्स पर धन्यवाद के साथ स्थायी रूप से लपेटकर मिल गया। धन्यवाद!
थॉमसन कॉमर

यह काम करता है, लेकिन मुझे समझ नहीं आता कि क्यों। क्या कोई समझा सकता है? man less, -rलपेटने के बारे में कुछ नहीं कहता है।
सिरो सेंटिल्ली 郝海东 i iro i 法轮功 '

@ThomsonComer '-r' OS X में नियंत्रण वर्ण दिखाने से संबंधित है ... आपको यह काम कैसे मिला?
Dil लिथियमMatrix

मुझे अब यकीन नहीं है। लेकिन कुछ लिंक है कि यह अधिक समझाने पाया: michael.otacoo.com/linux-2/avoid-escape-characters-in-git superuser.com/questions/366930/... unix.stackexchange.com/questions/19317/...
Shoan

49

इस जवाब के लिए एक टिप्पणी में जोश Diehl के लिए पूरा क्रेडिट के साथ , मैं फिर भी इस तरह लग रहा है कि खुद के लिए एक जवाब होना चाहिए, इसलिए इसे जोड़ने:

लंबी लाइनों में अंतर देखने से निपटने का एक तरीका शब्द-उन्मुख अंतर का उपयोग करना है। इसके साथ किया जा सकता है:

git diff --word-diff

इस मामले में, आपको एक बहुत अलग आउटपुट मिलेगा, जो आपको विशेष रूप से दिखाता है कि एक पंक्ति में क्या बदल गया है।

उदाहरण के लिए, ऐसा कुछ पाने के बजाय:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

आपको ऐसा कुछ मिल सकता है:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

या, इसके बजाय रंगीकरण के साथ:

सिर्फ <code> git diff </ code> का परिणाम

आपको यह मिल सकता है:

<code> git diff --word-diff </ code> का परिणाम

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


6
वहाँ के लिए कुछ विकल्प हैं --word-diff: color, plain, और porcelain। इसके अलावा, व्यक्ति शब्द सीमाओं के लिए रेगेक्स को बदल सकता है --word-diff-regex। डिफ़ॉल्ट प्रतीत होता है \S+। ( v2.1.1 )
माइकल - जहां

3
--color-wordsके लिए आशुलिपि लगती है --word-diff=color, जो अच्छा है जब आप केवल अंतर देख रहे हैं, इसे साझा नहीं कर रहे हैं।
CivFan

आह, यह दिलचस्प और संभावित रूप से बहुत उपयोगी है। साझा करने के लिए धन्यवाद!
दारागह ठीक

1
मुझे इससे ज्यादा --word-diff=porcelainअच्छा लगता है --word-diffक्योंकि porcelainअलग-अलग लाइनों में बदलाव होगा, जबकि --word-diffपरिवर्तन इनलाइन डालेंगे। अलग रेखाएं आपको अंतर को आसानी से देखने की अनुमति देती हैं जब अंतर सूक्ष्म होते हैं।
बुद्धिशाल नवमी 18'19

1
LaTeX फ़ाइलों के लिए जीवन बदल रहा है!
6005

30

पेजर के रूप में कम उपयोग करने के लिए और लाइन रैपिंग को स्थायी बनाने के लिए आप बस गुना-लंबी-लाइनों के विकल्प को सक्षम कर सकते हैं:

git config --global core.pager 'less -+S'

इस तरह से आपको कम उपयोग करते समय इसे टाइप करने की आवश्यकता नहीं है।

चियर्स


ओएस एक्स 10.9.5 पर मेरे लिए काम किया। धन्यवाद!
जे टेलर

इसी प्रकार, यदि आप Git को पढ़ते समय डिसएबल लाइन रैपिंग करना चाहते हैं, तो सेटिंग समान है:git config --global core.pager 'less -S
Topher Hunt

19

बस यह एक googled। GIT_PAGER='less -r'मेरे लिये कार्य करता है


9
इससे भी बेहतर (मेरे लिए): less -R(वास्तव में, मैं उपयोग करता हूं less -eiFRSX, जो रंग और लाइन-रैप समस्याओं को भी हल करता है।)
cdunn2001

2
कम -R समान है -r, लेकिन केवल ANSI "रंग" एस्केप अनुक्रम "कच्चे" रूप में आउटपुट होते हैं। -R के विपरीत, स्क्रीन उपस्थिति को ज्यादातर मामलों में सही ढंग से बनाए रखा जाता है। (आदमी कम)
अमीर

19

मैक OSX: किसी के पास '45 -S 'को छोड़कर कोई भी अन्य उत्तर नहीं है जबकि कम चल रहा है, मेरे लिए काम कर रहा है। शब्द-आवरण को लगातार बनाए रखने के लिए इसे निम्नलिखित लिया गया:

git config --global core.pager 'less -+$LESS -FRX'

यह मेरे लिए भी काम किया है, लेकिन मुझे समझ में क्यों नहीं आता है। क्या है -+$LESSपैरामीटर कर? जब तक git इसे परिभाषित नहीं करता, तब तक मेरा LESS पर्यावरण चर भी सेट नहीं किया जाता है।
जकार

3
@ जकर: तो कुछ नहीं करता। कुछ वातावरणों में, $LESSकुछ मान (जैसे .loginया .profileया कुछ और) के लिए सेट किया जाता है , और वह विकल्प, मुझे लगता है, बस चूक जोड़ता है, और फिर -FRXउन के ऊपर जोड़ता है ।
n

यह मेरे लिए OS X Mavericks पर काम नहीं करता है, $LESSअपरिभाषित है।
Dil लिथियमMatrix

n-0101 यह सही है कि + - $ LESS में केवल .login या .profile (यदि कोई हो) जो भी सेटिंग्स हैं, शामिल हैं। यह मेरे लिए मावेरिक्स पर ठीक काम कर रहा है, लेकिन आप इसे छोड़ सकते हैं, अगर यह समस्या पैदा करता है।
जॉन लम्बरजर

11

चूंकि Git 1.5.3 ( Sep 2007 )

एक --no-pagerविकल्प उपलब्ध है।

git --no-pager diff

मैं पेजर के उपयोग से गिट अंतर को कैसे रोकूं?

उदाहरण

V2.1 से शुरू होकर, रैप डिफ़ॉल्ट है

Git v2.1 नोट्स जारी करें


1
रिलीज नोट्स लिंक ने मेरी मदद की है। बस यह जानना चाहता हूं कि git> 2 ^ ^ पर (g) क्या चल रहा है (
fun)

5

आठ साल बाद मुझे /superuser/777617/line-wrapping-less-in-x-specifically-for-use-with-git-diff : से एक बेहतर जवाब मिला।

git config core.pager `fold -w 80 | less`

अब आप पाइप को मोड़ते हुए मोड़ते हैं, पहले, फिर से कम: लिपटे, कम पृष्ठ-ऊंचाई सही है, वाक्यविन्यास हाइलाइट रखें।


5

जब आप "git diff" का उपयोग कर रहे हैं और यह कई पेज दिखा रहा है (आप पृष्ठ के अंत में ":" देखें) तो इस स्थिति में आप "-S" टाइप कर सकते हैं और एंटर दबा सकते हैं। (S कैपिटल होना चाहिए)। यह लंबी लाइनों को मोड़ना होगा।


यह किसी भी सेटिंग के साथ गड़बड़ करने की तुलना में आसान है
chharvey

4

अब तक किसी ने इस ओर ध्यान नहीं दिया। यह याद रखने में काफी सरल है और git config में कोई अतिरिक्त विन्यास करने की आवश्यकता नहीं है

git diff --color | less -R

अब तक इस पृष्ठ के सभी उत्तरों में से सबसे सरल। मेरा वातावरण - ओरेकल लिनक्स 7.6। git diff --color | less -FRछोटे बदलावों के लिए जब स्क्रॉल करने की आवश्यकता नहीं है
राकेश एन

3

आप बस git के आउटपुट को अलग करने के लिए पाइप को अलग कर सकते हैं:

git diff | more

3

नहीं एक आदर्श समाधान है, लेकिन gitkऔर git-guiदोनों इस जानकारी को दिखा सकते हैं, और स्क्रॉलबार की है।


1

वर्तमान / डिफ़ॉल्ट कॉन्फ़िगरेशन को सूचीबद्ध करें:

  $ git config --global core.pager  
    less -FXRS -x2

फिर अपडेट करें और जैसे -एस छोड़ें:

  $ git config --global core.pager 'less -FXR -x2'

-S: स्क्रीन चौड़ाई की तुलना में लंबी लाइनों को कटा हुआ होने के बजाय काट दिया जाता है।


-1

जब परेशानी होती है, तो मैं अक्सर डिफमर्ज़ का सहारा लेता हूं। उत्कृष्ट अलग उपकरण जिसमें इन-लाइन अंतर हाइलाइटिंग है। इसके अलावा, नवीनतम संस्करणों में उन्होंने एक क्षैतिज मोड के लिए एक मोड जोड़ा।

मैं इसे उपयोग करने के लिए git को कॉन्फ़िगर करने में सक्षम नहीं हूं, हालांकि। इसलिए मुझे पहले फ़ाइल के दोनों संस्करणों को प्राप्त करने के लिए चक्कर लगाना होगा।

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