মূল অংশে যান

দুটি লেখা তুলনা করুন

দুটি সংস্করণই পেস্ট করুন আর দেখুন ঠিক কী বদলেছে, পাশাপাশি, প্রতিটি শব্দ পর্যন্ত। git যে অ্যালগরিদম ব্যবহার করে, সেটিই — লাইন ধরে ধরে অনুমান নয়, যা একটি লাইন যোগ করলেই ভেঙে পড়ে।

  • কখনো সংরক্ষণ করা হয় না
  • কোনো লাইন নেই, অপেক্ষা নেই
  • সাইনআপ নেই, ওয়াটারমার্ক নেই
দেখার ধরন

যেভাবে কাজ করে

1

দুটি সংস্করণ পেস্ট করুন

মূলটি বাঁয়ে, নতুনটি ডানে। অথবা দুটি ফাইল ছাড়ুন।

2

পার্থক্যগুলো দেখুন

যোগ হওয়া, মুছে ফেলা ও বদলানো লাইন চিহ্নিত থাকে, আর বদলানো লাইনের ভেতরে ঠিক কোন শব্দগুলো বদলেছে তা হাইলাইট করা থাকে।

3

অপ্রয়োজনীয় পার্থক্য উপেক্ষা করুন

বড়-ছোট হাতের অক্ষর, স্পেস আর ফাঁকা লাইন — প্রতিটি আলাদাভাবে উপেক্ষা করা যায়, আর দুটি লেখা শুধু এ কারণেই মিললে পেজটি তা জানিয়ে দেয়।

কোন লাইনকে একই ধরা হয়

তুলনা হয় লাইনের ওপর নয়, একটি কি-র ওপর। যে উপেক্ষা অপশনগুলো চালু আছে সেই অনুযায়ী প্রতিটি লাইনকে একটি কি-তে পরিণত করা হয়, ডিফ চলে কি-গুলোর ওপর, আর আপনাকে যা দেখানো হয় তা সবসময় আপনার মূল লেখা — তাই “বড়-ছোট হাতের অক্ষর উপেক্ষা করুন” চালু করলে কোন লাইনগুলো মেলে তা বদলায়, কিন্তু যা দেখানো হয় তার একটি অক্ষরও বদলায় না। স্পেসের জন্য দুটি আলাদা অপশন আছে, আর নাম দেখে যতটা মনে হয় তার চেয়ে এদের পার্থক্য বেশি: একটি লাইনের দুই প্রান্ত ছেঁটে দেয়, অন্যটি আগে পরপর থাকা স্পেস ও ট্যাবকে একটি স্পেসে নামিয়ে আনে, তারপর ছাঁটে। কোনোটিই স্পেস পুরোপুরি সরায় না, আর নামিয়ে আনার সময় শুধু আক্ষরিক স্পেস ও ট্যাব খোঁজা হয়, তাই লাইনের মাঝখানের আইডিওগ্রাফিক স্পেস বা নন-ব্রেকিং স্পেস অপরিবর্তিত থাকে এবং পার্থক্য হিসেবেই ধরা পড়ে।

ফাঁকা লাইন উপেক্ষা করার অপশনের একটি পরিণতি আছে, যা কেউ বলে না: তুলনা শুরুর আগেই ফাঁকা লাইনগুলো সরিয়ে ফেলা হয়, তাই ফলাফলের পাশের লাইন নম্বর শুধু টিকে থাকা লাইনগুলো গোনে, আর আপনার ফাইলের লাইন নম্বরের সঙ্গে আর মেলে না। অপশনটি বন্ধ থাকলে হুবহু মেলে। বদলানো লাইনের ভেতরে শব্দ-স্তরের হাইলাইট শুধু বড়-ছোট হাতের অক্ষর উপেক্ষার সেটিং মানে, আর কিছু নয় — স্পেসের অপশনগুলো সেখানে পৌঁছায় না, তাই অন্য কোনো কারণে বদলানো লাইনের ভেতরের স্পেসের পার্থক্যও পরিবর্তন হিসেবেই রং করা হয়।

কপি করার মতো ফলাফলটি পড়ার জন্য যা যা দরকার, তার সবদিক থেকেই একটি ইউনিফায়েড ডিফ — দুটি ফাইল হেডার, মাইনাস লাইন, প্লাস লাইন, প্রতিটি পরিবর্তনের চারপাশে তিন লাইনের প্রসঙ্গ — তবে একটি ব্যতিক্রম আছে, যা ভরসা করার আগে জেনে রাখা উচিত। এর হাঙ্ক মার্কারে কোনো লাইন রেঞ্জ থাকে না, তাই এটি বাগ রিপোর্ট, কোড রিভিউয়ের মন্তব্য বা ইমেইলের জন্য তৈরি, আর patch ও git apply কমান্ড এটি প্রত্যাখ্যান করবে। পড়ার জন্য নয়, প্রয়োগ করার মতো কিছু দরকার হলে git দিয়ে তৈরি করুন।

অন্য কিছু দরকার হলে

গঠনযুক্ত ফরম্যাট লাইন হিসেবে তুলনা করলে ভালো ফল দেয় না, আর ব্যর্থতাটা সূক্ষ্ম নয়, একেবারে চোখে পড়ার মতো: শুধু কি-র ক্রমে আলাদা দুটি JSON ডকুমেন্ট, বা একটি কলাম সরানো দুটি CSV ফিরে আসে পরিবর্তনের এমন এক দেয়াল হয়ে, যা কিছুই বলে না। এর বদলে গঠন বোঝে এমন কিছু দিয়ে ডিফ করুন — দুটি JSON ফাইলের কি আগে সাজিয়ে নিয়ে ফলাফল তুলনা করুন, অথবা daff ব্যবহার করুন, যা CSV-কে সারি ও কলাম হিসেবে ডিফ করে এবং প্রতিটি লাইন বদলেছে না বলে জানায় যে একটি কলাম সরেছে।

দুটি ডিরেক্টরি, বা একটি রিপোজিটরির ইতিহাসের দুটি সময়বিন্দু — এটি এই পেজের নয়, git-এর প্রশ্ন। আর যে গদ্যের অনুচ্ছেদগুলো নতুন করে র‍্যাপ করা হয়েছে, তার জন্য লাইনভিত্তিক দৃষ্টিভঙ্গি পুরোপুরি ভুল মাপের — git diff --word-diff লাইন ব্রেক কোথায় পড়েছে তা উপেক্ষা করে শুধু সরে যাওয়া শব্দগুলো দেখায়, আর কোনো ডকুমেন্ট রিফ্লো হলে আপনি আসলে এই তুলনাটিই চেয়েছিলেন।

সাধারণ প্রশ্নোত্তর

আমার ডকুমেন্ট কি কোথাও সংরক্ষণ করা হয়?

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

লাইন ধরে ধরে তুলনার চেয়ে এটি ভালো কেন?

কারণ লাইন ধরে ধরে মেলানো কিছু সরে গেলেই ভেঙে পড়ে। ফাইলের শুরুতে একটি লাইন যোগ করলে তার নিচের প্রতিটি লাইন এখন অন্য সারিতে, তাই সরল তুলনা পুরো ডকুমেন্টকেই বদলানো বলে জানায় — যা কোনো কাজের নয়। এই টুল Myers-এর অ্যালগরিদম ব্যবহার করে, যা git diff আর diff(1)-এর পেছনে কাজ করে, এবং একটি লেখাকে অন্যটিতে পরিণত করার জন্য সবচেয়ে কম সংখ্যক যোগ ও মোছা খুঁজে বের করে। শুরুতে একটি লাইন যোগ করুন, এটি জানাবে একটি লাইন যোগ হয়েছে।

শুধু কোন লাইন নয়, কোন শব্দ বদলেছে তাও কি দেখায়?

হ্যাঁ। কোনো লাইন যোগ বা মোছা না হয়ে এডিট হলে সেটিকে আবার শব্দ ধরে ধরে তুলনা করা হয়, আর শুধু সত্যিই বদলানো শব্দগুলো হাইলাইট হয়। একটি লম্বা অনুচ্ছেদে কেউ তিনটি শব্দ বদলালে আপনি দেখবেন তিনটি শব্দ, রঙের দেয়াল নয়।

“উপেক্ষা” অপশনগুলো কী করে?

কোন লাইনকে একই ধরা হবে, তা বদলে দেয়। বড়-ছোট হাতের অক্ষর, স্পেস বা ফাঁকা লাইন উপেক্ষা করা কাজে আসে নতুন করে ফরম্যাট করা কোড বা আবার পেস্ট করা লেখা তুলনার সময়। একটি গুরুত্বপূর্ণ বিষয়: দুটি লেখা যদি শুধু কিছু উপেক্ষা করার কারণেই মেলে, পেজটি সেগুলোকে হুবহু এক না বলে স্পষ্ট করে তা জানায় — “হুবহু এক” আর “বড়-ছোট হাতের অক্ষর উপেক্ষা করলে হুবহু এক” দুটি আলাদা তথ্য, আর এ দুটি গুলিয়ে ফেলেই মানুষ অপরিবর্তিত ভেবে একটি বদলানো ফাইল পাঠিয়ে দেয়।

ফলাফল কি প্যাচ হিসেবে পাওয়া যায়?

হ্যাঁ — তুলনাটি ইউনিফায়েড ডিফ হিসেবে কপি করা যায়, git আর ইমেইল প্যাচ যে ফরম্যাট ব্যবহার করে, প্রতিটি পরিবর্তনের চারপাশে কয়েকটি প্রসঙ্গ-লাইনসহ। বাগ রিপোর্টে পেস্ট করার জন্য এটিই সঠিক ফরম্যাট।

সাইজের কোনো সীমা আছে?

নির্দিষ্ট কোনো সাইজ সীমা নয়, সীমা হলো আপনার ডিভাইসের মেমোরি। দুটি লম্বা ডকুমেন্টের তুলনাও দ্রুত হয়, কারণ আসল কাজ শুরুর আগেই একই রকম শুরু ও শেষ অংশ মিলিয়ে বাদ দেওয়া হয়। হাজার হাজার আলাদা জায়গায় পার্থক্য থাকা দুটি লেখা ট্যাব জমিয়ে না দিয়ে ব্যাখ্যাসহ প্রত্যাখ্যান করা হয় — এত বড় ডিফ এমনিতেও পড়ার উপযোগী নয়।

Word বা PDF ফাইল কি তুলনা করা যায়?

সরাসরি নয়। আগে সেগুলোকে টেক্সটে কনভার্ট করুন — আমাদের [PDF থেকে টেক্সট](pdf-to-text) আর [DOCX থেকে TXT](docx-to-txt) টুল ঠিক এই কাজটিই করে — তারপর ফলাফলগুলো এখানে পেস্ট করুন।

জেনে রাখুন: তুলনা সর্বোচ্চ ৮,০০০টি পার্থক্য পর্যন্ত। এর বেশি হলে অ্যালগরিদমের খরচ এত দ্রুত বাড়ে যে ট্যাব জমে যেতে পারে, তাই পেজটি আটকে না থেকে থেমে যায় এবং তা জানিয়ে দেয় — সত্যিই সম্পর্কহীন দুটি ডকুমেন্ট খুব দ্রুত এই সীমায় পৌঁছায়। একই ফাইলের দুটি সংস্করণ তুলনা করলে প্রায় কখনোই পৌঁছায় না।

এই টুলটি আপনার ওয়েবসাইটে যোগ করুন

যেকোনো ব্লগ, ক্লাসের পেজ বা হেল্প আর্টিকেলের জন্য ফ্রি। একটি স্নিপেট পেস্ট করলেই আপনার ভিজিটররা আপনার পেজেই এটি ব্যবহার করতে পারবেন।