2015-12-18 10 views
5

another post में मैं आवश्यक करने के लिए git-diff के उत्पादन को संपीड़ित रहते हुए सुपाठ्य (खासकर जब अतिरिक्त [-/-] और {+/+} आसपास के विलोपन के लिए --word-diff=plain जोड़ने में बहुत साफगिट-डिफ कैसे सभी सफेद जगह-परिवर्तन को अनदेखा कर सकता है लेकिन अग्रणी है?

git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' 

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

कैसे खाली स्थान के कर सकते हैं परिवर्तन सही ढंग से hightlighted जा, हो सकता है इस तरह के ·, और , या कुछ अधिक git diff --word-diff-regex=. के {+ +} आदि के करीब लेकिन होशियार शब्द जुदाई के साथ के रूप में कुछ यूनिकोड वर्ण से खाली स्थान के की जगह?

+0

इस मामले में, मैं वर्तमान में msys-git की गिट '2.6.2.windows.1' का उपयोग कर रहा हूं। –

उत्तर

1

यहाँ प्रतिस्थापन का उपयोग कर एक वैकल्पिक प्रश्न के अंत में सुझाव दिया गया है:

git config --global core.pager 'less --raw-control-chars' 

ऐसी है कि यूनिकोड प्रतीकों कुछ अजीब <c3> ish उत्पादन का सही ढंग से प्रदर्शित कर रहे हैं।

*.py diff=txt 

अंत की तरह .gitattributes कुछ करने के लिए,

[diff "txt"] 
    textconv = unwhite.sh 

और, एक global solution की कमी है, unwhite.sh: निम्नलिखित अपना Git विन्यास में जोड़े

#!/bin/bash 
awk 1 ORS='[7m\\n[27m\n' $1 | sed -e 's/ /␣/g' -e 's/\t/→/g' 

की सलाह दी जा कच्चे भागने देखते हैं (awk\e का समर्थन करने में विफल रहता है)से पहले वर्णएस, मैं inverted colors में \n एस से अलग करने के लिए \n को न्यूलाइन-इंगित करने वाला संकेत दिखाता हूं।यह पेस्ट कॉपी करने में विफल हो सकता है, इस स्थिति में आपको मैन्युअल रूप से उन्हें डालना पड़ सकता है। या इसके भाग्य को यूनिकोड प्रतीक के साथ आजमाएं जैसे

मैं मूल यूनिकोड प्रतीकों से विचलित हो गया क्योंकि वे msysgit पर सही ढंग से प्रदर्शित करने में विफल रहे।

+0

'awk' भाग में क्रेडिट https://stackoverflow.com/ पर जाता है एक/14853319/321973 –

1
सबसे अच्छा मैं अब तक प्राप्त कर सकते हैं

git diff --color-words='[[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' --word-diff=plain 

नोट हटाया ^[:space:] के सामने है!

2

मैं आपकी समस्या का समाधान नहीं कर सका, लेकिन मुझे चिंता है कि गिट आपके खिलाफ यहां काम कर रहा है। याद रखें कि --color-words=<regex>--word-diff=color और --word-diff-regex=<regex> का संयोजन है। man git diff प्रलेखन कहते हैं:

--word-diff-regex=<regex> 
     Use <regex> to decide what a word is, instead of considering runs 
     of non-whitespace to be a word. Also implies --word-diff unless it 
     was already enabled. 

     Every non-overlapping match of the <regex> is considered a word. 
     Anything between these matches is considered whitespace and 
     ignored(!) for the purposes of finding differences. You may want 
     to append |[^[:space:]] to your regular expression to make sure 
     that it matches all non-whitespace characters. A match that 
     contains a newline is silently truncated(!) at the newline. 

     The regex can also be set via a diff driver or configuration 
     option, see gitattributes(1) or git-config(1). Giving it 
     explicitly overrides any diff driver or configuration setting. 
     Diff drivers override configuration settings. 

नोट बीच पैरा के इस भाग: "(!)। इन मैचों के बीच कुछ भी खाली स्थान के माना जाता है और नजरअंदाज कर दिया है खोजने मतभेद के प्रयोजनों के लिए" तो , ऐसा लगता है कि गिट ट्रेस विशेष रूप से यहां व्हाइटस्पेस का इलाज करने के लिए प्रयास करता है, और यह एक समस्या हो सकती है।

+0

धन्यवाद, मैं देखता हूं ... इसलिए मैं [प्रतिस्थापन मार्ग] के लिए गया (https://stackoverflow.com/a/34653541/321973) –

संबंधित मुद्दे

 संबंधित मुद्दे