আমি কীভাবে একটি ইউনিফাইড ডিফ ফাইলটিতে প্রতি-চরিত্রের পার্থক্যগুলি কল্পনা করতে পারি?


122

বলুন আমি একটি প্যাচ দিয়ে তৈরি পেয়েছি git format-patch। ফাইলটি মূলত কিছু মেটাডেটার সাথে একীভূত পার্থক্য। আমি যদি ভিমে ফাইলটি খুলি, আমি দেখতে পাচ্ছি কোন রেখাগুলি সংশোধন করা হয়েছে, তবে পরিবর্তিত লাইনের কোন অক্ষর আলাদা হয় তা আমি দেখতে পাচ্ছি না । প্রতি-চরিত্রের পার্থক্য দেখার জন্য কেউ কি কোনও উপায় (ভিমে, বা উবুন্টুতে চালিত কোনও ফ্রি সফটওয়্যার) জানেন?

একটি পাল্টা উদাহরণ যেখানে প্রতি-চরিত্রের পার্থক্যটি দৃশ্যমান হয় তা কার্যকর করা হয় vimdiff a b

আপডেট শুক্র 12 নভেম্বর 22:36:23 ইউটিসি 2010

আপনি যেখানে কোনও একক ফাইলের সাথে কাজ করছেন সেই দৃশ্যের জন্য ডিফফ্যাচ সহায়ক

আপডেট থু জুন 16 17:56:10 ইউটিসি 2016

গিট ২.৯-এ আলাদা-হাইলাইট পরীক্ষা করুন । এই স্ক্রিপ্টটি আমি যা করতে চাইছিলাম ঠিক তাই করে ।


এটি superuser.com- এ আরও ভাল হতে পারে
ডেইনিথ

13
সম্ভবত। আমি স্ট্যাকওভারফ্লো ডট কমকে বেছে নিয়েছি যেহেতু এফএকিউতে "প্রোগ্রামারদের দ্বারা সাধারণত ব্যবহৃত সফ্টওয়্যার সরঞ্জামগুলি" সম্পর্কে প্রশ্নের উত্তর দেওয়ার জায়গাটি উল্লেখ করা হয়েছে
অ্যাডাম মনসেন

7
আমি নিশ্চিত নই যে এটি সরাসরি আপনার প্রশ্নের জবাব দেয়, তবে git diff --color-wordsসাধারণ ইউনিফাইড ডিফার্ট আউটপুট না করে লাইনগুলির মধ্যে শব্দের কী পরিবর্তন ঘটেছিল তা দেখার জন্য এটি খুব কার্যকর। যদিও এটি চরিত্রভিত্তিক নয় বরং শব্দ-ভিত্তিক, সুতরাং যে বিষয়বস্তুতে আপনি পৃথক করছেন তার মধ্যে যদি খুব বেশি সাদা জায়গা না থাকে তবে আউটপুট কম ঝরঝরে হতে পারে। (সম্পাদিত: ওফস, আমি দেখতে পাচ্ছি যে আপনি যা চেয়েছিলেন আমি সেটিকে ভুল
বুঝেছিলাম

উত্তর:


13

প্রশ্নটিতে আপনার রেফারেন্সগুলি দেওয়া, আমি নিশ্চিত নই যে আপনি এটির উত্তরটি চান কিনা :) তবে ইমাকরা এটি করতে পারে। ডিফটিযুক্ত ফাইলটি খুলুন, নিশ্চিত হয়ে নিন যে আপনি diff-modeরয়েছেন (যদি ফাইলটির নাম দেওয়া হয় foo.diffবা foo.patchএটি স্বয়ংক্রিয়ভাবে ঘটে; অন্যথায় টাইপ করুন M-x diff-mode RET), আপনার আগ্রহী হুঙ্কে যান এবং তার C-c C-bজন্য হিট করুন refine-hunk। বা একবারে ফাইলটির মধ্য দিয়ে একবারে পদক্ষেপ নিন M-n; এটি স্বয়ংক্রিয়ভাবে পরিশোধন করবে।


1
আমার জন্য কাজ কর! হেই, আমি 10 বছর ধরে ভিম ব্যবহার করেছি, তবে আমি কেবল ইমাস ইনস্টল করেছি। :)
অ্যাডাম মনসেন

তবে ইমাস স্টিডিনের পড়া সমর্থন করে না, উদাহরণস্বরূপ আমি এটি করতে পারি নাgit log master.. -p | emacs -
হাই-অ্যাঞ্জেল

1
@ হাই-অ্যাঞ্জেল আপনি ইমাস খুলতে M-!পারেন এবং কমান্ডটি চালানোর জন্য টাইপ করতে পারেন এবং আউটপুটটিকে একটি বাফারে ক্যাপচার করতে পারেন।
লেগোস্কিয়া

172

গিট এ, আপনি কোন অঙ্গীকার না করে মার্জ করতে পারেন। প্রথমে আপনার প্যাচটি মার্জ করুন, তারপরে:

git diff --word-diff-regex=.

সমান চিহ্নের পরে বিন্দুটি নোট করুন।


139
উন্নত: git diff --color-words=.
এনটিসি 2

4
@ এনটিসি 2 আপনার মন্তব্যটি উত্তর করা উচিত।
টাইলার কলিয়ার

1
অনুগ্রহ করে দয়া করে নোট করুন, আমার আসল ব্যবহারের ক্ষেত্রে ধরে নেওয়া হয় যে আপনার কাছে কেবল প্যাচ ফাইল রয়েছে , গিট রেপো বা এমনকি বেস / সংশোধিত সংস্করণও নেই। এজন্য আমি @ লেগোস্কিয়ার উত্তরটি গ্রহণ করেছি ... এটি ঠিক কী অনুরোধ করা হয়েছিল তা বর্ণনা করে।
অ্যাডাম মনসেন

2
@ এনটিসি 2 git diff --color-words=.এবং git diff --color-words .ভিন্নভাবে কাজ করে। ভাল হয় git diff --color-words .
abhisekp

2
@ অভিসেকপি: ছবিটির জন্য ধন্যবাদ আমি মনে করি আমি এটি বুঝতে পেরেছি: git diff --color-words .সত্যই একই রকম git diff --color-words -- .! অর্থাৎ, .একটি পথ হিসাবে ব্যাখ্যা করা হয়। আপনি যাচাই করতে পারেন mkdir x y; echo foo > x/test; git add x/test; git commit -m test; echo boo > x/test; cd y; git diff --color-words=.; git diff --color-words .; git diff --color-words -- .
এনটিসি

145

এখানে কম শোরগোল আউটপুট সহ কিছু সংস্করণ রয়েছে git diff --word-diff-regex=<re>এবং এর তুলনায় কম টাইপিংয়ের প্রয়োজন হয়, তবে এর সমতুল্য git diff --color-words --word-diff-regex=<re>,।

সরল (স্থান পরিবর্তনগুলি হাইলাইট করে):

git diff --color-words

সরল (স্বতন্ত্র চরিত্রের পরিবর্তনগুলি হাইলাইট করে; স্থানের পরিবর্তনগুলি হাইলাইট করে না):

git diff --color-words=.

আরও জটিল (স্থান পরিবর্তনগুলি হাইলাইট করে):

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

সাধারণভাবে:

git diff --color-words=<re>

<re>পরিবর্তনগুলি সনাক্তকরণের উদ্দেশ্যে যেখানে "শব্দ" সংজ্ঞায়িত করা একটি রেজিপ্সেক্স রয়েছে?

এগুলি কম গোলমাল যে তারা পরিবর্তিত "শব্দের" রঙ করে তবে --word-diff-regex=<re>রঙিন -/+চিহ্নিতকারীগুলির সাথে কেবল "ম্যাচ" শব্দটি ব্যবহার করে ।


9
আমি নিজেই অংশটি --color-wordsছাড়াই পছন্দ করি =.
টাইলার কলিয়ার

1
git diff --color-words='\w'ডায়াক্রিটিক (Git v1.7.10.4) সঙ্গে ভাল কাজ করবে
NR

1
আপনার আরও জটিল সংস্করণ দুর্দান্ত কাজ করে। আমি যোগ --word-diff=plainঅতিরিক্ত আছে [-এবং -]মুছে দেওয়া পারিপার্শ্বিক এবং {+এবং +}পারিপার্শ্বিক সংযোজন। ম্যানুয়াল সতর্ক হিসাবে, যদিও, উৎস এই বিভেদক প্রকৃত ঘটনার করছে না কোন ভাবেই পলান
Tobias Kienzler

2
তোমার আরো জটিল সংস্করণ দুর্ভাগ্যবশত যেমন খাঁজ পরিবর্তন হাইলাইট বলে মনে হচ্ছে না, আমি খোলা একটি প্রশ্ন এই
Tobias Kienzler

এই উত্তর দুর্দান্ত! তবে আসলে কি সেই পরিবর্তনগুলির পটভূমি সবুজ / লাল রঙে পরিবর্তন করার কোনও উপায় আছে?
ওওএলএফপিডব্লিউএনআর

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

উপরের রেজেক্স ( থমাস রাস্ট থেকে ) বিরামচিহ্ন / চরিত্রের স্তরে (যতটা শোরগোলের মতো নয় --word-diff-regex=.) বিচ্ছিন্ন অংশগুলিকে পৃথক করার একটি সজ্জিত কাজ করে ।

আমি ফলাফলের ফলাফলের স্ক্রিনশট এখানে পোস্ট করেছি


হালনাগাদ:

এই নিবন্ধটিতে কিছু দুর্দান্ত পরামর্শ রয়েছে। বিশেষত, contrib/গিট রেপোর গাছে একটি diff-highlightপার্ল স্ক্রিপ্ট রয়েছে যা সূক্ষ্ম দানাযুক্ত হাইলাইটগুলি দেখায়।

এটি ব্যবহার করতে দ্রুত শুরু করুন:

$ curl https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight > diff-highlight
$ chmod u+x diff-highlight
$ git diff --color=always HEAD~10 | diff-highlight | less -R

5
আপনি এটিকে সংক্ষিপ্ত করতে পারেন--color-words=[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
সম্পাদিত

আমাকে 'সেখানে মানটির শুরুতে যুক্ত করতে হয়েছিল। অন্যথায় আমি একটি ত্রুটি পেয়েছিলাম। এছাড়াও, আমি কেবল ব্যবহার --color-wordsকরেই আমি সেই রেজিএক্সপ্যাক্স ব্যবহার করার মতো হুবহু আচরণ পাই।
gcb

3
@gcb পাঠ্যের বিষয়বস্তুতে গুরুত্বপূর্ণ। আপনার পরিবর্তনগুলি যদি হোয়াইটস্পেস দ্বারা পৃথক করা হয় তবে কোনও পার্থক্য নেই। কিন্তু আপনি যদি আপনার মত কিছু পরিবর্তন পরিবর্তন foo.barকরতে foo.quxআপনি পার্থক্য দেখতে হবে।
জাস্টিন এম কেজ

5
সহজ: git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
এনটিসি 2

1
আমি হোমব্রিউয়ের সাথে গিট ইনস্টল করেছি এবং ইতিমধ্যে এটিতে স্ক্রিপ্ট ছিল /usr/local/share/git-core/contrib/diff-highlight/diff-highlightএটি মনে হয় যে হোমব্রাবির গিট পুরো অবদানটিকে ইনস্টল করে /usr/local/share/git-core/contrib/। সুতরাং অবশেষে, নিম্নলিখিতটি আমার জন্য কাজ করেছেgit diff --color=always | /usr/local/share/git-core/contrib/diff-highlight/diff-highlight
আশুতোষ জিন্দাল

6

নোডজেএস ইনস্টল করার বিরুদ্ধে যদি আপনার কিছু না থাকে তবে "ডিফ-সো-ফ্যান্সি" ( https://github.com/so-fancy/diff-so-fancy ) নামে একটি প্যাকেজ রয়েছে , যা ইনস্টল করা খুব সহজ এবং নিখুঁতভাবে কাজ করে:

npm install -g diff-so-fancy
git diff --color | diff-so-fancy | less -R

সম্পাদনা: সবেমাত্র এটি সরকারী বিবিধ-হাইলাইটের জন্য একটি মোড়কের ... এটি আমার মতো পার্লোফোবসের জন্য ইনস্টল করা সহজ এবং গিটহাব পৃষ্ঠাটি সুন্দরভাবে নথিভুক্ত করা হয়েছে :)


2

প্রতি চরিত্র পার্থক্য সরঞ্জাম সম্পর্কে সচেতন নই, তবে প্রতি শব্দ পার্থক্য সরঞ্জাম রয়েছে: ডাব্লুডিফ।

উদাহরণগুলি ইউনিক্স / লিনাক্সের শীর্ষ 4 ফাইল পার্থক্য সরঞ্জামগুলি দেখুন - ডিফ, কলর্ডিফ, ডাব্লুডিফ, ভিমডিফ


wdiff আকর্ষণীয়, ধন্যবাদ! আমার আসল প্রশ্নটি স্পষ্ট করার জন্য, আমি এমন কিছু সন্ধান করছি যা একক ফাইলের জন্য বর্ধিত সিনট্যাক্স হাইলাইট সরবরাহ করে যা ইউনিফাইড ডিফর্ম ফর্ম্যাটে ঘটে।
অ্যাডাম মনসেন

সামান্য অফটোপিক (শব্দ-শব্দের জন্য পৃথক পৃথক আউটপুট বৃদ্ধি না করে), তবে আমি ওয়ার্ড-ফর-ওয়ার্ড ভিজ্যুয়ালাইজেশনের জন্য নিম্নলিখিত সংমিশ্রণগুলি সবচেয়ে ভাল পেয়েছি: * wdiff old_file new_file | cdiff * vimdiff , তারপরে :windo wincmd Kউল্লম্ব উইন্ডো লেআউটে স্যুইচ করার জন্য ভিমের অভ্যন্তরে (অন্যের নীচে এক) পাশ থেকে একপাশে লম্বা লাইনযুক্ত ফাইলগুলির জন্য এই বিন্যাসটি আরও ভাল।
আলেকসান্দার অ্যাডামোস্কি

2
BTW, অন্যান্য বেশ কয়েকটি টুলস মূল্য চেক আউট, লিঙ্ক প্রবন্ধে উল্লেখ না: wdiff2, mdiff, এবং Google এর অনলাইন টুল
আলেকসান্দার আদমভস্কি

1

কিছুটা গবেষণা করার পরে আমি লক্ষ্য করেছি যে মূল প্রশ্নটি মূল ভিম মেলিং তালিকায় এই প্রশ্নটি দু'বার উঠে এসেছে। NrrwRgn প্লাগইন উল্লেখ করা হয়েছিল উভয় বার (দুই সংকীর্ণ অঞ্চলে এবং তাদের বিবিধতা)। খ্রিস্টান ব্র্যাব্যান্ডের বর্ণিত NrrwRgn ব্যবহার করা সমাধানের চেয়ে অনেক বেশি কাজের মতো মনে হয় তবে এটি যথেষ্ট ভাল।

আমি এনআরআরআরআরগ্রিন চেষ্টা করেছিলাম এবং এটির সাথে: পৃথক পৃথকভাবে, একটি একক ফাইলের অংশগুলির মধ্যে প্রতি-চরিত্রের পার্থক্য চিত্রিত করার জন্য কার্যকর ছিল। তবে এটি অনেক কীস্ট্রোক লাগল। আমার Vimscript বেশ মরিচা, তবে এটি সম্ভবত স্ক্রিপ্ট করা যেতে পারে। সম্ভবত NrrwRgn পছন্দসই কার্যকারিতা সরবরাহ করতে বাড়ানো যেতে পারে।

থটস?

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