जब मेरे पास एक अंतर है, तो मैं इसे कैसे चित्रित कर सकता हूं ताकि यह अच्छा लगे? मैं इसे कमांड लाइन के लिए चाहता हूं, इसलिए कृपया कोई GUI समाधान न करें।
जब मेरे पास एक अंतर है, तो मैं इसे कैसे चित्रित कर सकता हूं ताकि यह अच्छा लगे? मैं इसे कमांड लाइन के लिए चाहता हूं, इसलिए कृपया कोई GUI समाधान न करें।
जवाबों:
मैन पेज diff
अपने आप से रंगीकरण के लिए कोई समाधान नहीं सुझाते। कृपया उपयोग करने पर विचार करें colordiff
। यह चारों ओर एक आवरण है diff
जो समान उत्पादन को अलग करता है, सिवाय इसके कि यह पठनीयता बढ़ाने के लिए रंगीन सिंटैक्स हाइलाइटिंग का उपयोग करके आउटपुट को बढ़ाता है:
diff old new | colordiff
या केवल:
colordiff old new
स्थापना:
sudo apt-get install colordiff
brew install colordiff
याport install colordiff
less -R
, जो रंगों के लिए भागने के क्रम को सही ढंग से प्रदर्शित करता है।
-y
सक्षम करने का विकल्प) के लिए काम नहीं करता है ☹ vimdiff
नीचे दिए गए सुझाव शायद एक बेहतर तरीका है
colordiff
के लिए अच्छी तरह से काम करता है svn diff | colordiff
(यानी उन स्थितियों में जहां आपके पास केवल अंतर है, न कि दो फ़ाइलों को अलग किया जा रहा है)।
-y
) समर्थन शामिल है।
विम का उपयोग करें :
diff /path/to/a /path/to/b | vim -R -
या फिर भी बेहतर है, VimDiff (या vim -d
, जो टाइप करने के लिए छोटा है) दो-तीन या चार फाइलों के बीच अंतर को साइड-बाय-साइड दिखाएगा।
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
ctrl-c
और ctrl-x
विम में अन्य उपयोग हैं। ctrl-q
कई टर्मिनलों द्वारा कब्जा कर लिया गया है। अपनी आवश्यकताओं के अनुसार सबसे अच्छा तरीका खोजने के लिए लिखना और छोड़ना देखें ।
zsh
? मैं =(...)
निर्माण को नहीं पहचानता । दूसरा, मेरे diff -ur a b
मन में था।
=(...)
वास्तव में अभी तक एक और विकल्प प्रतीत होता है (जो मैंने हाल ही में देखा था, जब ऊपर वर्णित समस्या में चल रहा था):
git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>
यदि आपके पास Git है (जो आप पहले से ही किसी भी तरह से उपयोग कर सकते हैं), तो आप इसे तुलना के लिए उपयोग कर पाएंगे, भले ही फाइलें स्वयं संस्करण नियंत्रण में न हों। यदि डिफ़ॉल्ट रूप से आपके लिए सक्षम नहीं है, तो यहां रंग समर्थन को सक्षम करना पहले से वर्णित वर्कअराउंड की तुलना में काफी आसान लगता है।
git diff <(xxd file1) <(xxd filed)
काम नहीं करता है।
git help diff
। इसलिए यदि आपका अंतर अलग हो रहा है, तो कोशिश करें cd
कि आप कहां हैं।
git config color.diff auto
git diff --no-index
दो फ़ाइलों की तुलना करने के लिए उपयोग करें।
diff --color
विकल्प को जीएनयू डिफुटिल्स 3.4 (2016-08-08) में जोड़ा गया था
diff
अधिकांश डिस्ट्रोस पर यह डिफ़ॉल्ट कार्यान्वयन है, जो जल्द ही मिल जाएगा।
Ubuntu 18.04 में diffutils
3.6 है और इसलिए यह है।
3.5 पर यह इस तरह दिखता है:
परीक्षण:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
जाहिरा तौर पर प्रतिबद्ध c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (मार्च 2015) में जोड़ा गया।
शब्द-स्तर में अंतर
की तरह diff-highlight
। यह संभव नहीं लगता है, फ़ीचर अनुरोध: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
संबंधित सूत्र:
ydiff
हालांकि, यह नीचे देखें।
ydiff
अगल-बगल शब्द स्तर भिन्न होता है
https://github.com/ymattw/ydiff
क्या यह निर्वाण है?
python3 -m pip install --user ydiff
diff -u a b | ydiff -s
परिणाम:
यदि लाइनें बहुत संकरी हैं (डिफ़ॉल्ट 80 कॉलम), तो इसके साथ स्क्रीन पर फिट करें:
diff -u a b | ydiff -w 0 -s
परीक्षण फ़ाइलों की सामग्री:
ए
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
ख
1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20
ydiff
एकीकरण
ydiff
आवश्यक कॉन्फ़िगरेशन के बिना गिट के साथ एकीकृत करता है।
अंदर के बजाय git diff
, आप केवल कर सकते हैं:
ydiff -s
और इसके बजाय git log
:
ydiff -ls
यह भी देखें: जब मैं "git diff" करता हूं, तो मैं साइड-बाय-साइड अंतर कैसे प्राप्त कर सकता हूं?
उबंटू 16.04, git 2.18.0, ydiff 1.1 पर परीक्षण किया गया।
There is no word-highlighting, yet
- कोई अपडेट? यह वही है जो मैं इस सवाल के लिए आया था (मैं चाहता हूं grep --color
-जैसे अलग आउटपुट)।
git diff --color
काम भी करता है। Ssh पर काम करते समय उपयोगी।
diff --color=always | less -R
और उन अवसरों के लिए जब आपके तत्काल नियंत्रण से परे कुछ पागल बाधा के कारण एक yum install colordiff
या एक apt-get install colordiff
विकल्प नहीं है, या आप सिर्फ पागल महसूस कर रहे हैं , तो आप पहिया को एक पंक्ति के साथ फिर से आविष्कार कर सकते हैं:
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
एक शेल स्क्रिप्ट में फेंक दें और एकीकृत पाइप इसके माध्यम से आउटपुट को अलग करते हैं।
यह हंक मार्करों को नीला बनाता है और क्रमशः हरे और लाल पृष्ठभूमि में नए / पुराने फ़ाइलनाम और जोड़े / हटाए गए लाइनों को हाइलाइट करता है। 1 और यह अंतरिक्ष में 2 बदलाव करेगा, जो कॉर्डियोर्ड कैन की तुलना में अधिक आसानी से स्पष्ट होगा।
1 संयोग से, फ़ाइल नाम को संशोधित लाइनों के रूप में ही उजागर करने का कारण यह है कि फ़ाइल नाम और संशोधित लाइनों के बीच सही अंतर करने के लिए आवश्यक रूप से फ़ॉरेस्ट प्रारूप को पार्स करना आवश्यक है, जो कि रेगेक्स से निपटने के लिए कुछ नहीं है। उन्हें समान रूप से काम करना "अच्छी तरह से पर्याप्त" नेत्रहीन और समस्या को तुच्छ बनाता है। उस ने कहा, कुछ दिलचस्प सूक्ष्मताएं हैं ।
2 लेकिन पीछे चल रहे टैब नहीं। जाहिरा तौर पर टैब उनकी पृष्ठभूमि सेट नहीं मिलता है, कम से कम मेरे xterm में। यह टैब बनाम स्थान परिवर्तन करता है हालांकि थोड़ा बाहर खड़ा है।
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(हालांकि मुझे उम्मीद है कि एक बेहतर तरीका है)।
आप colordiff का उपयोग करने के लिए तोड़फोड़ विन्यास बदल सकते हैं
~ / .Subversion / config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
के माध्यम से: https://gist.github.com/westonruter/846524
रंगीन, शब्द-स्तर diff
ouput
यहां आप नीचे दी गई स्क्रिप्ट और अंतर-हाइलाइट के साथ क्या कर सकते हैं :
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
diff-highlight
(करने के लिए क्रेडिट @ retracile के जवाब के लिए sed
हाइलाइटिंग)
मैं grc
(जेनेरिक Colouriser) का उपयोग करता हूं , जो आपको कई आदेशों के आउटपुट को रंगीन करने की अनुमति देता है diff
।
यह एक पायथन लिपि है जिसे किसी भी कमांड के चारों ओर लपेटा जा सकता है। इसलिए diff file1 file2
आह्वान grc diff file1 file2
करने के बजाय , आप कोली आउटपुट देखने के लिए आमंत्रित करेंगे । मैंने इसे आसान बनाने के diff
लिए उपनाम grc diff
दिया है।
fork()
कॉल के कारण mingw / cygwin के साथ विंडोज पर काम नहीं करता है , हालांकि WSL के साथ काम करने की संभावना है।
यहाँ एक और समाधान है कि आह्वान है sed
रंग दिखाने के लिए के लिए उपयुक्त एएनएसआई भागने दृश्यों सम्मिलित करने के लिए +
, -
और @
, लाल, हरे, और सियान में लाइनों क्रमशः।
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
इस प्रश्न के अन्य समाधानों के विपरीत, यह समाधान ANSI एस्केप अनुक्रमों को स्पष्ट रूप से नहीं बताता है। इसके बजाय, यह क्रमशः उचित रंग सेट करने और टर्मिनल विशेषताओं को रीसेट करने के लिए एएनएसआई से बचने के क्रम उत्पन्न करने के लिए आदेश tput setaf
और tput sgr0
आदेश देता है।
प्रत्येक तर्क के लिए उपलब्ध रंगों को देखने के लिए tput setaf
, इस कमांड का उपयोग करें:
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
यहाँ आउटपुट कैसे दिखता है:
यहाँ सबूत है कि tput setaf
और tput sgr0
कमांड उपयुक्त ANSI एस्केप सीक्वेंस उत्पन्न करते हैं:
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
चूंकि wdiff
सम्मिलन और विलोपन दोनों की शुरुआत और अंत में स्ट्रिंग निर्दिष्ट करने के लिए स्वीकार करता है, आप एएनएसआई रंग अनुक्रमों को उन तारों के रूप में उपयोग कर सकते हैं:
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
उदाहरण के लिए, यह दो CSV फ़ाइलों की तुलना का आउटपुट है:
Https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html से उदाहरण
colordiff
अब (1.0.16) समझता है wdiff
, इसलिए आप बस पाइप भी कर सकते हैं wdiff -n f1 f2 | colordiff
:। wdiff
डिफ्यूटल में विलीन हो जाना चाहिए ...
मैं आपको सुझाव देना चाहूंगा कि आप अलग -अलग कल्पना करें। मैं इसे अपने काम के दौरान उपयोग करता हूं और यह सुनिश्चित करता है कि यह अब तक बहुत अच्छा है। यह कई विकल्पों के साथ पैक किया गया है और यह आपके तरीके को कॉन्फ़िगर करने के लिए वास्तव में आसान है जिस तरह से आप चाहते हैं।
आप इसे इसके द्वारा स्थापित कर सकते हैं:
sudo npm install -g diff-so-fancy
या मैक पर:
brew install diff-so-fancy
बाद में, आप इस तरह से अपने अंतर को उजागर कर सकते हैं:
diff -u file1 file2 | diff-so-fancy
बैट कमांड के साथ :
diff file1 file2 | bat -l diff
उबंटू पर गिट के हाल के संस्करणों पर, आप इसके साथ अलग-हाइलाइटिंग सक्षम कर सकते हैं:
sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
और फिर इसे अपने में जोड़ना .gitconfig
:
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
यह संभव है कि स्क्रिप्ट अन्य डिस्ट्रोस में कहीं और स्थित है, आप यह locate diff-highlight
पता लगाने के लिए उपयोग कर सकते हैं कि कहां है।