কমান্ড লাইনে কীভাবে ডিফারেন্ট করবেন?


502

আমার যখন ভিন্নতা আছে, আমি কীভাবে এটি রঙিন করব যাতে এটি দেখতে ভাল লাগে? আমি এটি কমান্ড লাইনের জন্য চাই, সুতরাং দয়া করে কোনও জিইউআই সমাধান করবেন না।


6
কোন বিশেষ অপারেটিং সিস্টেম / শেল?
রোল্যান্ড শ

4
ব্যবহার করে দেখুন github.com/walles/riff । একটি যুক্ত বোনাস হিসাবে, এটি পরিবর্তন করে রেখাগুলির কি অংশগুলি হাইলাইট করে।
জোহান ওয়ালস

উত্তর:


607

ম্যান পেজগুলি diffনিজের থেকে রঙিনকরণের জন্য কোনও সমাধানের পরামর্শ দেয় না। ব্যবহার বিবেচনা করুন colordiff। এটি চারপাশে একটি মোড়ক diffযা ভিন্ন হিসাবে একই আউটপুট উত্পাদন করে, বাদে এটি পাঠযোগ্যতা বাড়ানোর জন্য রঙিন সিনট্যাক্স হাইলাইট ব্যবহার করে আউটপুটকে বাড়িয়ে তোলে:

diff old new | colordiff

বা শুধু:

colordiff old new

স্থাপন:

  • উবুন্টু / ডেবিয়ান: sudo apt-get install colordiff
  • ওএস এক্স: brew install colordiffবাport install colordiff

45
সবেমাত্র আমি খুঁজে পেয়েছি :-)। এটি ব্যবহার less -Rকরে এটি কম পাইপ করা যেতে পারে যা সঠিকভাবে রঙগুলির জন্য পালানোর ক্রমগুলি প্রদর্শন করে।
ড্যানিয়েল কুলম্যান

34
কেবল সিনট্যাক্সটি ব্যবহার করতে পারেন: কলর্ডিফ ফাইল 1 ফাইল 2
ফিলিপ আলভারেজ

3
হায়, এটি পাশাপাশি বসে আউটপুট ( -yসক্ষম করার বিকল্প) এর জন্য কাজ করে না ☹ vimdiffনীচের পরামর্শটি সম্ভবত আরও ভালতর উপায়
হাই-অ্যাঞ্জেল

8
colordiffজন্য ভাল কাজ করে svn diff | colordiff(অর্থাত পরিস্থিতিতে যেখানে আপনি শুধুমাত্র পরিবর্তন আছে, diffed হচ্ছে না দুই ফাইল)।
কর্নস্টাল্ক

8
@ হাই-অ্যাঞ্জেল এর মন্তব্যের আপডেট হিসাবে: কলর্ডিফ আপডেট হয়েছে এবং এখন পাশাপাশি রয়েছে ( -y) সমর্থনও অন্তর্ভুক্ত।
বেইলি পার্কার

333

ভিম ব্যবহার করুন :

diff /path/to/a /path/to/b | vim -R -

বা আরও ভাল এখনও, VimDiff (বা vim -d, যা টাইপ করা সংক্ষিপ্ত) পাশাপাশি পাশাপাশি দুটি, তিন বা চারটি ফাইলের মধ্যে পার্থক্য দেখায়।

উদাহরণ:

vim -d /path/to/[ab]

vimdiff file1 file2 file3 file4

7
@ জিচাও: আমি কমান্ডগুলি উলামা না করে বরং শিখতে পছন্দ করি। আমার ডটফাইলগুলি উপলভ্য না হলেও এমনকি আমি এগুলি যে কোনও জায়গায় ব্যবহার করতে পারি।
জনসিওয়েব

1
@ অ্যাকুরিয়াস পাওয়ার: ctrl-cএবং ভিমে ctrl-xঅন্যান্য ব্যবহার রয়েছে। ctrl-qঅনেক টার্মিনাল দ্বারা বন্দী করা হয়। আপনার প্রয়োজনগুলির পক্ষে সর্বোত্তমভাবে স্যুট করার উপায়টি খুঁজে পেতে লেখার এবং ছেড়ে দেওয়া দেখুন ।
জনসিওয়েব

1
প্রথমে, এটি কোন ধরণের শেল? zsh? আমি =(...)কনস্ট্রাক্টকে চিনতে পারি না । দ্বিতীয়ত, আমার মনে ছিল diff -ur a b
এক্স-ইয়ুরি

3
প্রকৃতপক্ষে. Zsh এ, ফর্মটির=(...)
জনসিওয়েব

1
এই সমাধানটি গৃহীত উত্তরের চেয়ে উত্তম, কারণ এটির জন্য আপনাকে প্রশাসকের অধিকার থাকতে হবে এবং কোনও অতিরিক্ত সরঞ্জাম ইনস্টল করতে হবে না
আমানজুর

173

প্রকৃতপক্ষে আরও একটি বিকল্প রয়েছে বলে মনে হচ্ছে (যা আমি সম্প্রতি দেখলাম, যখন উপরে বর্ণিত সমস্যাটিতে দৌড়ানোর সময়):

git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>

যদি আপনার চারপাশে গিট থাকে (যা আপনি ইতিমধ্যে যেভাবেই ব্যবহার করতে পারেন), তবে ফাইলগুলি সংস্করণ নিয়ন্ত্রণে না থাকলেও আপনি তুলনার জন্য এটি ব্যবহার করতে সক্ষম হবেন। যদি আপনার জন্য ডিফল্টরূপে সক্ষম না করা হয় তবে রঙ বর্ণটি এখানে সক্ষম করা পূর্বে উল্লিখিত কিছু কাজের ক্ষেত্রের তুলনায় যথেষ্ট সহজ বলে মনে হচ্ছে।


19
এটি ঝরঝরে, তবে দুঃখের বিষয় যখন ইনপুটগুলি পাইপ হয় তখন এটি কাজ করে না। উদাহরণস্বরূপ বাইনারি ফাইলগুলির সাথে তুলনা করা git diff <(xxd file1) <(xxd filed)কাজ করে না।
মাইকেল অ্যান্ডারসন

8
অদ্ভুতভাবে, ফাইলগুলির মধ্যে কমপক্ষে একটি 'বর্তমান সংগ্রহস্থলের বাইরে' থাকতে হবে git help diff। সুতরাং যদি আপনার গিটের পার্থক্য খালি আসছে, cdআপনি কোথায় আছেন তা চেষ্টা করে দেখুন।
খারাপ অনুরোধ

7
গিট git config color.diff auto
ডিফের

2
অতি সাধারণ এবং দ্রুত
EE33

31
যদি উভয় ফাইলই বর্তমান সংগ্রহস্থলের ভিতরে থাকে তবে git diff --no-indexদুটি ফাইলের তুলনা করতে ব্যবহার করুন।
অলিভিয়ার 'balbaum' Scherler

94

diff --color বিকল্পটি জিএনইউ ডিফিউটিস 3.4 (2016-08-08) এ যুক্ত হয়েছিল

এটি diffবেশিরভাগ ডিস্ট্রোজে ডিফল্ট রূপায়ণ, যা শীঘ্রই এটি পেয়ে যাবে।

উবুন্টু 18.04 এর diffutils3.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

আরও দেখুন: আমি যখন "গিট ডিফ" করি তখন আমি কীভাবে পাশাপাশি পার্থক্য পেতে পারি?

উবুন্টু 16.04, গিট 2.18.0, ydiff 1.1 এ পরীক্ষিত।


এখানে ডকুমেন্টেশন দেওয়া আছে।
অ্যালেক্সি

1
সেই মেলিং তালিকার থ্রেডে: There is no word-highlighting, yet- কোনও আপডেট? এটিই আমি এই প্রশ্নের জন্য এসেছি (আমি grep --color-র মতো-ভিন্ন ভিন্ন আউটপুট চাই)।
i336_

@ i336_ কোনও আপডেট নেই দুর্ভাগ্যক্রমে, আমি যদি কিছু পাই তবে আমি প্রশ্নটি আপডেট করব। কিছু পাইলে আমাকে পিং কর।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

উপায় দ্বারা git diff --colorকাজ করে। Ssh ওভার কাজ করার সময় দরকারী।
নাগেভ

ডিফ খুব বড়? ব্যবহারdiff --color=always | less -R
অজানা

69

এবং এইসব পরিস্থিতিতে যখন আপনার তাত্ক্ষণিক নিয়ন্ত্রণের বাইরে কিছু উন্মত্ত বাধা থাকার কারণে যখন কোনও yum install colordiffবা কোনও apt-get install colordiffবিকল্প না হয় বা আপনি কেবল উন্মাদ বোধ করেন তখন আপনি সেডের লাইনের সাহায্যে চাকাটি পুনরায় উদ্ভাবন করতে পারেন:

sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'

এটি একটি শেল স্ক্রিপ্টে নিক্ষেপ করুন এবং এটির মাধ্যমে পাইপ ইউনিফাইড ডিফার্ট আউটপুট।

এটি কুঁচকে চিহ্নিতকারীগুলিকে নীল করে তোলে এবং যথাক্রমে সবুজ এবং লাল পটভূমিতে নতুন / পুরানো ফাইল নাম এবং যুক্ত / সরানো রেখাগুলি হাইলাইট করে। 1 এবং এটি কালারডিফের চেয়ে আরও সহজেই স্পষ্টভাবে স্থান পরিবর্তনযোগ্য 2 টি পরিবর্তন করবে ।


1 ঘটনাচক্রে, ফাইলের নামগুলি পরিবর্তিত লাইনের সমান হাইলাইট করার কারণ হ'ল ফাইলের নামগুলি এবং পরিবর্তিত রেখাগুলির মধ্যে সঠিকভাবে পার্থক্য করার জন্য পৃথক ফর্ম্যাটটি সঠিকভাবে পার্স করা দরকার, যা একটি রেজিক্সের সাথে মোকাবেলা করার মতো কিছু নয়। তাদের একই কাজ হ'ল দর্শনীয়ভাবে "যথেষ্ট যথেষ্ট" এবং সমস্যাটিকে তুচ্ছ করে তোলে। বলেছিল, কিছু আকর্ষণীয় সূক্ষ্মতা রয়েছে

2 তবে পিছনে থাকা ট্যাবগুলি নয়। দৃশ্যত ট্যাবগুলি কমপক্ষে আমার এক্সটারেমে তাদের পটভূমি সেট পান না। এটি ট্যাব বনাম স্থান পরিবর্তনগুলি কিছুটা হলেও আলাদা করে তোলে।


5
@ ম্যাট: এখানে একটি ম্যাকের জন্য নিষ্ঠুর বলার পদ্ধতি রয়েছে: sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"(যদিও আমি আশা করি এর থেকে আরও ভাল উপায় আছে)।
313

1
হুম, এটি সাজানোর কাজ ... প্রতিটি অংশের মধ্যে একটি গোলাপী ব্যাকগ্রাউন্ডের মধ্যে 3 টি ড্যাশ দিয়েছে।
ম্যাট মন্ট্যাগ

উদাহরণস্বরূপ রংগুলি সহজেই পরিবর্তন করার কোনও বিকল্প ছাড়াই ম্যানুয়াল অপঠনযোগ্য, অযৌক্তিক উপায়।

1
বাবু এই দুর্দান্ত! যাওয়ার পথে! এটি কিছু দুর্দান্ত সেড উইজার্ড্রি।
fthinker

6
সেডের / ^ - / \ এক্স 1 বি [31 মি - /;; এস / ^ + / \ এক্স 1 বি [32 মি + + /; এস / ^ @ / \ এক্স 1 বি [34 এম @ /; এস / $ / \ এক্স 1 বি [0 মি / 'দেখতে দুর্দান্ত দেখাচ্ছে
ইউরা

16

কলর্ডিফ ব্যবহারের জন্য আপনি সাবভারশন কনফিগারেশনটি পরিবর্তন করতে পারেন

~ / .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


এসএনএন: 'কলর্ডিফ' প্রক্রিয়া শুরু করা যায় না: সংস্থান অস্থায়ীভাবে অনুপলব্ধ
নিকেন

আপনি কি কলর্ডিফ ইনস্টল করেছেন?
Azd325

হ্যাঁ, আমি সেই পথেও হার্ডকোডিংয়ের চেষ্টা করেছি (সাইগউইনে চলছে)
নিকেন

idk চেষ্টা করতে পারে এই superuser.com/questions/635995/...
Azd325

12

রঙিন, শব্দ-স্তরের diff আউটপুট

আপনি নীচের স্ক্রিপ্ট এবং আলাদা-হাইলাইট দিয়ে কি করতে পারেন তা এখানে :

রঙিন ডিফ স্ক্রিনশট

#!/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হাইলাইট)


আমি কীভাবে জিভিমে এই আউটপুটটি ব্যবহার করব?
হেমন্ত শর্মা

এর জন্য vim, একটি প্লাগইন ব্যবহার করুন, উদাহরণস্বরূপ ডিফচার
টম হ্যালে

10

আমি grc(জেনেরিক কলরিজার) ব্যবহার করি যা আপনাকে বেশ কয়েকটি কমান্ডের আউটপুট সহ রঙিন করতে দেয় diff

এটি একটি অজগর স্ক্রিপ্ট যা কোনও কমান্ডের চারপাশে মোড়ানো যায়। সুতরাং অনুরোধ করার পরিবর্তে diff file1 file2, আপনি grc diff file1 file2রঙিন আউটপুট দেখতে অনুরোধ করবেন । আমি ওরফে আছে diffকরতে grc diffএটা সহজ করতে।


fork()কলগুলির কারণে উইন্ডোজটিতে মিংডাব্লু / সাইগউইন নিয়ে কাজ করে না , যদিও ডাব্লুএসএল-এর সাথে কাজ করার সম্ভাবনা রয়েছে।
গ্যাব্রিয়েল ডেভিলার্স

6

এখানে আরেকটি সমাধান পূজা হয় sedরং দেখানো হবে তার জন্য উপযুক্ত ANSI পালাবার ক্রম সন্নিবেশ করতে +, -এবং @, লাল, সবুজ ও সায়ান মধ্যে লাইন যথাক্রমে।

diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"

এই প্রশ্নের অন্যান্য সমাধানগুলির থেকে পৃথক, এই সমাধানটি এএনএসআই অব্যাহতি সিকোয়েন্সগুলি স্পষ্টভাবে বানান করে না। পরিবর্তে, এটি যথাযথ রঙ নির্ধারণ করতে এবং যথাক্রমে টার্মিনাল বৈশিষ্ট্যগুলি পুনরায় সেট করার জন্য এএনএসআই অব্যাহতি সিকোয়েনস উত্পন্ন করার জন্য আদেশগুলি 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

5

যেহেতু wdiffউভয় সন্নিবেশ এবং মুছে ফেলার শুরু এবং শেষে স্ট্রিং নির্দিষ্ট করে দেওয়া আরগগুলি গ্রহণ করে, আপনি এএনএসআই রঙের ক্রমগুলি সেই স্ট্রিং হিসাবে ব্যবহার করতে পারেন:

wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2

উদাহরণস্বরূপ, এটি দুটি সিএসভি ফাইলের তুলনা করার আউটপুট:

সিএসভি ফাইলগুলির পৃথক আউটপুট

Https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Ees উদাহরণ.html থেকে উদাহরণ


1
colordiffNOW (1.0.16) বুঝতে পারে wdiff, তোমরাও তেমনি শুধু পাইপ যা করতে পারেন: wdiff -n f1 f2 | colordiffwdiffডিফিউটিলেটগুলিতে একীভূত করা উচিত ...
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

3

আমি আপনাকে আলাদা চেষ্টা করার পরামর্শ দিচ্ছি । আমি আমার কাজের সময় এটি ব্যবহার করি এবং এটি এখন পর্যন্ত দুর্দান্ত মনে হয়েছে। এটি অনেকগুলি বিকল্পের সাহায্যে আসে এবং আপনার ডিফগুলি আপনার পছন্দ মতো কনফিগার করা সত্যই সহজ।

আপনি এটি দ্বারা এটি ইনস্টল করতে পারেন:

sudo npm install -g diff-so-fancy

বা ম্যাকে:

brew install diff-so-fancy

এরপরে, আপনি আপনার মতভেদগুলি হাইলাইট করতে পারেন:

diff -u file1 file2 | diff-so-fancy


0

উবুন্টুতে গিটের সাম্প্রতিক সংস্করণগুলিতে আপনি এর সাথে আলাদা-হাইলাইটিং সক্ষম করতে পারবেন:

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এটি আপনি কোথায় তা খুঁজে পেতে ব্যবহার করতে পারেন ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.