🧑‍💻 Git & Diff Tools

دستورات diff و patch

با دستور diff تفاوت بین دو فایل را پیدا کنید و با patch آن تغییرات را روی فایل اصلی اعمال کنید

📂 diff • diff -u • patch • patch -p1 • diff -r

🗺️ مسیر یادگیری دستورات diff و patch

  1. 📄 معرفی دستور diff
  2. 🔍 استفاده از diff -u برای مقایسه بهتر
  3. 📋 مثال اول: مقایسه دو فایل منو
  4. 🧩 معرفی دستور patch
  5. 📄 مثال دوم: اصلاح فایل hello_world
  6. 📚 منابع بیشتر برای مطالعه

📄 گام ۱: معرفی دستور diff

دستور diff یکی از ابزارهای خط فرمان در لینوکس و یونیکس است که برای پیدا کردن تفاوت‌ها بین دو فایل استفاده می‌شود. این دستور به شما کمک می‌کند تا ببینید دقیقاً چه چیزی در دو نسخه از یک فایل تغییر کرده است.

اما استفاده از diff به تنهایی (بدون هیچ پرچمی) کمی سخت و نامفهوم است، چون خروجی آن به‌صورت پیش‌فرض خیلی مختصر و بدون زمینه (context) است و ممکن است به‌راحتی قابل درک نباشد.

💡 نکته: diff به‌طور پیش‌فرض فقط خط‌های متفاوت را نشان می‌دهد، بدون اینکه خطوط اطراف را هم ببینیم تا بفهمیم تغییر در چه بخشی از فایل رخ داده است.

🔍 گام ۲: استفاده از diff -u برای مقایسه بهتر

برای اینکه خروجی diff را خوانا‌تر و مفیدتر کنیم، از پرچم -u (مخفف unified) استفاده می‌کنیم:

$ diff -u file1.txt file2.txt

این دستور دو فایل را خط‌به‌خط مقایسه می‌کند و خط‌های متفاوت را در کنار هم (side-by-side) در یک خروجی یکپارچه نشان می‌دهد.

مزیت بزرگ diff -u این است که زمینه (context) بیشتری را نشان می‌دهد؛ یعنی چند خط قبل و بعد از تغییرات را هم می‌بینیم تا متوجه شویم تغییر دقیقاً در کجای فایل رخ داده است.

⚡ ترفند: همیشه از diff -u استفاده کن، چون خروجی آن بسیار واضح‌تر از diff معمولی است و درک تغییرات را آسان‌تر می‌کند.

📋 گام ۳: مثال اول – مقایسه دو فایل منو

بیایید با یک مثال ساده، کار با diff -u را تمرین کنیم. فرض کنید دو فایل داریم:

محتوای menu1.txt (فایل اول):

Menu1:
Apples
Bananas
Oranges
Pears

محتوای menu2.txt (فایل دوم):

Menu:
Apples
Bananas
Oranges
Pears

همان‌طور که می‌بینی، تنها تفاوت این دو فایل این است که در فایل اول کلمه Menu1 نوشته شده، اما در فایل دوم کلمه Menu (بدون عدد ۱). حالا بیایید این دو فایل را با diff -u مقایسه کنیم:

$ diff -u menu1.txt menu2.txt
--- menu1.txt	2024-01-15 10:00:00.000000000 +0000
+++ menu2.txt	2024-01-15 10:05:00.000000000 +0000
@@ -1,5 +1,5 @@
-Menu1:
+Menu:
 Apples
 Bananas
 Oranges
 Pears

در خروجی می‌بینیم که:

✅ نتیجه: diff -u به‌وضوح نشان می‌دهد که دقیقاً چه تغییری رخ داده و در کجای فایل است.

🧩 گام ۴: معرفی دستور patch

دستور patch ابزاری است که برای اعمال تغییرات (تفاوت‌ها) روی فایل اصلی استفاده می‌شود. به این صورت که:

این دقیقاً همان کاری است که در درسنامه‌های قبلی انجام دادیم، اما حالا با یک مثال ساده‌تر آن را مرور می‌کنیم.

📌 نکته: patch به شما امکان می‌دهد تغییرات را بدون نیاز به ویرایش دستی فایل، به‌صورت خودکار اعمال کنید.

📄 گام ۵: مثال دوم – اصلاح فایل hello_world

بیایید یک مثال ساده‌تر را با هم مرور کنیم. دو فایل داریم:

محتوای hello_world.txt (فایل اصلی):

Hello World

محتوای hello_world_long.txt (نسخه جدید):

Hello World
It's a wonderful day!

حالا بیایید با diff -u تفاوت را ببینیم و آن را در یک فایل .diff ذخیره کنیم:

$ diff -u hello_world.txt hello_world_long.txt > hello_world.diff

محتوای فایل hello_world.diff:

--- hello_world.txt	2019-12-16 19:24:12.556102821 +0900
+++ hello_world_long.txt	2019-12-16 19:24:38.944207773 +0900
@@ -1 +1,3 @@
 Hello World
+It's a wonderful day!

همان‌طور که می‌بینی، خط +It's a wonderful day! نشان می‌دهد که یک خط جدید به فایل اضافه شده است.

حالا با استفاده از patch، این تغییر را روی فایل اصلی اعمال می‌کنیم:

$ patch hello_world.txt < hello_world.diff
patching file hello_world.txt

اگر حالا محتوای hello_world.txt را ببینیم، تغییرات اعمال شده‌اند:

$ cat hello_world.txt
Hello World
It's a wonderful day!

یعنی با یک دستور ساده، فایل اصلی به‌روزرسانی شد و به نسخه جدید تبدیل گردید.

🚀 نتیجه: با استفاده از diff و patch، می‌توانیم تغییرات را به‌راحتی و بدون خطا روی فایل‌های خود اعمال کنیم.

📚 گام ۶: منابع بیشتر برای مطالعه

دستورات diff و patch قابلیت‌های بیشتری هم دارند که در این درسنامه به آنها نپرداختیم. برخی از این قابلیت‌ها عبارتند از:

اگر می‌خواهید اطلاعات بیشتری درباره این دستورات و گزینه‌های پیشرفته آن‌ها بدانید، می‌توانید به صفحات راهنما (man pages) این دستورات مراجعه کنید:

💡 نکته: صفحات راهنما (man pages) یکی از بهترین منابع برای یادگیری دستورات لینوکس هستند و توضیحات کاملی درباره همه گزینه‌های یک دستور ارائه می‌دهند.

🎉 با اتمام این جلسه، با ابزارهای diff و patch به‌خوبی آشنا شدید و می‌توانید تفاوت‌ها را پیدا کرده و تغییرات را اعمال کنید.

🌐 با ما همراه باشید

برای دریافت آخرین مطالب، پرسش و پاسخ و اطلاع از رویدادهای مرتبط، ما را در شبکه‌های اجتماعی دنبال کنید.