কম্পিউটার টিউটোরিয়াল

Git Diff: পূর্ণ গাইড

git diff কমান্ড দুটি কমিটের ফাইলগুলোর পার্থক্য বা আপনার বর্তমান রিপোজিটরি এবং একটি পূর্ববর্তী কমিটের পার্থক্য দেখায়। এই কমান্ড পরিবর্তন করা ফাইলগুলোর হেডার এবং মেটাডেটা দিয়ে পরিবর্তনগুলো প্রদর্শন করে।

Git ভার্সন কন্ট্রোল সিস্টেম নিয়ে কাজ করার সময় আপনি আপনার রিপোজিটরির ডেটা অন্য ডেটা সোর্সের সাথে তুলনা করতে চাইতে পারেন। উদাহরণস্বরূপ, আপনি দুটি আলাদা কমিট বা দুটি ফাইল তুলনা করতে চাইতে পারেন।

সেই কাজে diff ফাংশনটি কাজ করে। Diffing হলো একটি ফাংশন যা দুটি ইনপুট নেয় এবং সেই ডেটা সোর্সগুলোর মধ্যে থাকা পরিবর্তনগুলো উপস্থাপন করে। Diff ফাংশন ব্রাঞ্চ, ফাইল এবং কমিটের ওপর এক্সিকিউট করা যায়।

এই টিউটোরিয়ালে, উদাহরণসহ, Git-এ diffing-এর বেসিক এবং git diff কমান্ড কীভাবে ব্যবহার করতে হয় তা আলোচনা করা হবে। এই টিউটোরিয়াল পড়া শেষে, আপনি git diff কমান্ড ব্যবহার করতে এক্সপার্ট হবেন।

Git Diff কমান্ড

git diff কমান্ড দুটি কমিটের ফাইলগুলোর মধ্যে পার্থক্য বা একটি কমিট এবং আপনার বর্তমান রিপোজিটরির মধ্যে পার্থক্য প্রদর্শন করে। আপনি দেখতে পাবেন কোন টেক্সট ফাইলে যোগ হয়েছে, কোথা থেকে রিমুভ হয়েছে এবং কোথাও পরিবর্তন হয়েছে।

git diff কমান্ডের সিনট্যাক্স:

git diff

ডিফল্টভাবে, git diff কমান্ড আপনার রিপোজিটরিতে যেকোনো অকমিটেড পরিবর্তন প্রদর্শন করে।

আমরা আমাদের মূল ফাইল থেকে রিমুভ হওয়া লাইনগুলো এবং আমাদের মূল ফাইলে যোগ বা পরিবর্তন হওয়া লাইনগুলো দেখতে পাই। প্রায়শই, Git diff একটি Git রিপোজিটরিতে ব্রাঞ্চগুলো তুলনা করার জন্য ব্যবহৃত হয়।

দুই কমিটের মধ্যে Git Diff

আপনি দুটি Git কমিটের ফাইলগুলো তুলনা করতে পারেন সেই কমিটগুলোর রেফেরেন্সের নাম নির্দিষ্ট করে। একটি রেফ হতে পারে কমিট আইডি বা HEAD, যা বর্তমান ব্রাঞ্চকে নির্দেশ করে।

git diff <commit1> <commit2>

চলুন আমাদের Git রিপোজিটরিতে দুটি কমিট তুলনা করি।

এই কাজ করতে, আপনাকে প্রথমে যেসব কমিটের ফাইলগুলো তুলনা করতে চান তাদের আইডি রিট্রিভ করতে হবে। আপনি এটি git log --pretty=oneline কমান্ড দিয়ে করতে পারেন, যা একটি রিপোজিটরির সব কমিটের সংক্ষিপ্ত সারাংশ ফেরত দেয়:

git log --pretty=oneline

এই কমান্ডটি ফেরত দেয়:

5141ea9c41cdc7152408bfcab54a910f34441855 (HEAD -> master) feat: Update README.md 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e docs: Create README.md

এখন, ধরা যাক আমরা এই দুটি কমিট তুলনা করতে চাই। আমরা এটি এই কমান্ড দিয়ে করতে পারি:

git diff 5141ea9c41cdc7152408bfcab54a910f34441855 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e

উপরোক্ত কমান্ড আমাদের দুটি কমিট জুড়ে একটি diff অপারেশন পারফর্ম করবে।

দুই ব্রাঞ্চের মধ্যে Git Diff

Git-এ দুটি ব্রাঞ্চ diff কমান্ড ব্যবহার করে তুলনা করতে, আপনি যেসব ব্রাঞ্চ তুলনা করতে চান সেগুলো আর্গুমেন্ট হিসেবে নির্দিষ্ট করুন। প্রতিটি ব্রাঞ্চের নামের মধ্যে দুইটি ডট ব্যবহার করুন। এই ডটগুলো ইঙ্গিত দেয় যে আপনি প্রতিটি ব্রাঞ্চের লেটেস্ট কমিট পড়তে চান এবং সেগুলো তুলনা করতে চান:

git diff <branch1>..<branch2>

ধরা যাক আমরা আমাদের রিপোজিটরিতে "master" ব্রাঞ্চটি "dev-v0.9" নামে একটি ব্রাঞ্চের সাথে তুলনা করতে চাই। আমরা এটি এই কমান্ড দিয়ে করতে পারি:

git diff master dev-v0.9

যখন এই কমান্ডটি এক্সিকিউট হবে, আমাদের কোডবেসে "master" এবং "dev-v0.9" ব্রাঞ্চগুলোর মধ্যে একটি diff রান হবে।

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

ধরা যাক আমরা README.md ফাইলটি আমাদের "master" এবং "dev-v0.9" ব্রাঞ্চ জুড়ে তুলনা করতে চাই। আমরা এটি এই কোড দিয়ে করতে পারি:

git diff master dev-v0.9 ./README.md

এটি README.md ফাইলটি (যেটি আমাদের বর্তমান ডিরেক্টরিতে আছে, "./" সিনট্যাক্স দ্বারা নির্দেশিত) "master" এবং "dev-v0.9" ব্রাঞ্চ জুড়ে তুলনা করবে।

Git Diff কমান্ড উদাহরণ

ধরা যাক আমরা একটি ব্ল্যাঙ্ক রিপোজিটরি ইনিশিয়ালাইজ করেছি, এবং আমরা আমাদের রিপোজিটরি README.md ফাইল দিয়ে শুরু করতে চাই। আমরা আমাদের রিপোজিটরিতে একটি README.md ফাইল তৈরি করেছি যেটিতে নিচের বাক্যটি আছে:

This is an example of the Git diff feature.

ফাইল এবং কমিট প্রস্তুত করা

আমরা এই ফাইল দিয়ে একটি কমিট তৈরি করব git commit কমান্ড ব্যবহার করে:

git commit

এটি আমাদের রিপোজিটরিতে করা পরিবর্তনগুলো সংরক্ষণ করতে দেয়। git কমান্ডটি ফেরত দেয়:

[master (root-commit) 749055e] docs: Create README.md 1 file changed, 1 insertion(+) create mode 100644 README.md

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

ধরা যাক আমরা README.md ফাইলে "We just added this line to our file." বাক্যটি যোগ করতে চাই। আমরা এটি এই কমান্ড দিয়ে করতে পারি:

echo "We just added this line to our file." >> README.md

উপরোক্ত কমান্ড আমাদের বাক্যটি README.md ফাইলে যোগ করে।

এটি মানে আমাদের ইনিশিয়াল README.md ফাইল এবং আমাদের রিপোজিটরির বর্তমান README.md ফাইলের মধ্যে এখন পার্থক্য আছে।

git diff কমান্ড এক্সিকিউট করলে আমরা এই দুটি ফাইলের পার্থক্য দেখতে পাব। ডিফল্টভাবে, git diff কমান্ড লেটেস্ট কমিট এবং রিপোজিটরির বর্তমান স্টেটের মধ্যে সব ফাইলের জন্য একটি diff প্রডিউস করে।

দুই কমিটের মধ্যে Git Diff চালানো

যখন আমরা কমান্ডটি চালাই, নিচের রেসপন্স ফেরত আসে:

diff --git a/README.md b/README.md index f808522..f08e544 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ +We have just added this line to our file.

This is an example of the Git diff feature.

এটি git diff কমান্ড থেকে একটি টিপিক্যাল রেজাল্ট। আমাদের রেজাল্ট দেখাচ্ছে কী যোগ হয়েছে বা রিমুভ হয়েছে আমাদের ফাইলে একটি কম্বাইনড diff ফরম্যাটে।

git diff কমান্ড আমাদের লাস্ট কমিট এবং আমাদের বর্তমান রিপোজিটরির মধ্যে সব ফাইলের সব পরিবর্তনগুলির একটি তালিকা ফেরত দেয়।

যদি আপনি একটি রিপোজিটরিতে একটি নির্দিষ্ট ফাইলে করা পরিবর্তনগুলো রিট্রিভ করতে চান, তবে আপনি সেই ফাইলটিকে থার্ড প্যারামিটার হিসেবে নির্দিষ্ট করতে পারেন। ধরা যাক আমরা শুধু README.md ফাইলে করা পরিবর্তনগুলো দেখতে চাই।

এই উদাহরণে, আমরা শুধু README.md ফাইলটি পরিবর্তন করেছি, তাই শুধু সেই পরিবর্তনগুলো দেখাবে। কিন্তু যদি আমরা একটি বড় রিপোজিটরির সাথে কাজ করতাম, তবে আমরা শুধু একটি ফাইলের পরিবর্তনগুলো তুলনা করতে চাইতাম। সেক্ষেত্রে আমরা এই কমান্ডটি ব্যবহার করতে পারতাম:

git diff README.md

এই কমান্ড আমাদের বর্তমান README.md ফাইলটি আমাদের রিপোজিটরিতে লাস্ট কমিট করা ভার্সনের সাথে তুলনা করতে দেয়।

Git Diff ব্রেকডাউন

Git diffs-এর অনেক কম্পোনেন্ট আছে যা আমরা একটি রিপোজিটরিতে একটি ফাইলের পরিবর্তনগুলো বিশ্লেষণ করতে ব্যবহার করতে পারি। চলুন সেগুলো ব্রেক ডাউন করি, আমাদের আগের উদাহরণের রেফারেন্সে।

ইনপুট ফাইল

আমাদের diff-এর প্রথম কম্পোনেন্ট হলো ইনপুট ফাইল। diff-এর এই অংশ আমাদের বলে দেয় diff-এ কোন ফাইলগুলো তুলনা করা হচ্ছে।

আমরা আমাদের কোডের বর্তমান ভার্সনে README.md ফাইলটি আমাদের কোডের লাস্ট ভার্সনের README.md ফাইলের সাথে তুলনা করছি। এটি আমাদের কোডের প্রথম লাইনে বলা হয়েছে:

diff --git a/README.md b/README.md

মেটাডেটা

এরপর, আমাদের diff-এ আমাদের Git রিপোজিটরির মেটাডেটা থাকে। এই মেটাডেটা Git-এর দ্বারা ব্যবহৃত অবজেক্ট ভার্সন লেবেলগুলো প্রদর্শন করে যা আপনার ফাইলে করা পরিবর্তনগুলো ট্র্যাক করতে ব্যবহৃত হয়।

এই ইনফরমেশন diff কমান্ডের অধিকাংশ কেসে নাকाफी ব্যবহৃত হয়। আমাদের উপরের উদাহরণে, মেটাডেটাটি দেখাচ্ছে:

index f808522..f08e544 100644

চেঞ্জ মার্কার

Git diff আউটপুটের পরবর্তী অংশ হলো চেঞ্জ মার্কার। এই ফাইল প্যাটার্ন মার্কারগুলো আমাদের বলে দেয় আমাদের ফাইলগুলোর কী ধরনের পরিবর্তন করা হয়েছে। আমাদের উপরের উদাহরণের চেঞ্জ মার্কারগুলো হলো:

--- a/README.md +++ b/README.md

এই মার্কারগুলো আমাদের বলে দেয় যে a/README.md থেকে পরিবর্তনগুলো করা হয়েছে (মাইনাস সাইন দ্বারা নির্দেশিত), যা b/README.md-এ প্রতিফলিত হয়েছে (প্লাস সাইন দ্বারা নির্দেশিত)।

কোড পরিবর্তন

শেষে, আমাদের diff আমাদের কোডে করা পরিবর্তন들의 তালিকা ফেরত দেয়। একটি ফুল ফাইল তুলনার বিপরীতে, diffs শুধু একটি ফাইলের পরিবর্তন করা সেকশনগুলো দেখায়। আমাদের উদাহরণে, আমরা আমাদের ফাইলে একটি লাইন যোগ করেছি, যা নিচের রেজাল্ট ফেরত দিয়েছে:

@@ -1 +1,2 @@ This is an example of the Git diff feature. +We have just added this line to our file.

প্রথম লাইনটি আমাদের ফাইলে করা পরিবর্তনগুলোর একটি সারাংশ। এটি বলে দেয় যে আমরা আমাদের ফাইলে একটি লাইন কোড যোগ করেছি (+1) যেটি দ্বিতীয় লাইন থেকে শুরু হয়েছে (2)।

তারপর, আমরা করা পরিবর্তনগুলোর তালিকা দেখতে পাই। আপনি দেখতে পাচ্ছেন, যেহেতু আমরা "We have just added this line to our file." লাইনটি যোগ করেছি, সেই লাইনটি আমাদের diff-এ দাঁচাচ্ছে। প্লাস সাইন বলে দেয় যে আমরা সেই লাইনটি ফাইলে যোগ করেছি।

উপসংহার

Diffing Git-এ একটি উপকারী ফাংশন যা আপনাকে একটি Git রিপোজিটরিতে দুটি ফাইল, ব্রাঞ্চ বা কমিট তুলনা করতে দেয়। এটি আপনাকে দেখতে দেয় আপনার রিপোজিটরির একটি নির্দিষ্ট পয়েন্ট থেকে কী পরিবর্তন হয়েছে।

এই টিউটোরিয়ালে Git-এ diffing-এর বেসিক এবং git diff কমান্ড কীভাবে ব্যবহার করে diff অপারেশন পারফর্ম করতে হয় তা আলোচনা করা হয়েছে। এখন আপনি git diff কমান্ড এক্সপার্টের মত ব্যবহার শুরু করতে পারেন!

Git-এ আরও লার্নিং রিসোর্সের জন্য, আমাদের How to Learn Git গাইড দেখুন।

  1. Git: নির্দিষ্ট ব্রাঞ্চ ক্লোন করার পদ্ধতি

  2. Git Cherry Pick: ধাপে ধাপে গাইড

  3. Git Add: ধাপে ধাপে গাইড

  4. SQL CREATE TABLE: টেবিল তৈরির পূর্ণ গাইড