لا تُجرى مقارنة كلها داخل مخزن جِت. تُعدل ملفات التكوين يدويًا. تُصَبَّر ردود API في خيط سلوك. تُعدل استعلامات SQL عبر أوراق مُعدّة. عندما تحتاج إلى رؤية التغييرات الدقيقة بين قطعتين من النص، تحتاج إلى أداة مقارنة — لكنها ليست بالضرورة جِت.
إليك كيفية اختيار الأداة المناسبة.
عندما تحتاج إلى مقارنة خارج جِت
مُقارنة جِت مُدمجة في سيرتك العملية عندما يتم تطبيق التحكم في النسخ. لكن هناك العديد من الحالات التي تقع خارج هذا السياق:
- ملفات التكوين — مقارنة
nginx.confقبل وبعد التغيير، خاصة إذا لم تكن الملف في مخزن - إسقاطات ردود API — اكتشاف ما تغير بين مُستندات JSON المُجمعة قبل أسبوعين
- استعلامات SQL — مقارنة استعلام يُستخدم في البيئة المُطوّرة مقابل الاستعلام الذي يُستخدم في البيئة الإنتاجية
- التوثيق — مراجعة وثيقة مُعدّة يدويًا قبل تسليمها
في هذه الحالات، ترغب في مقارنة نظيفة دون الحاجة إلى تغيير أو ملف مُعدّ للإدخال.
التعليمات diff التعليمات: الأعلام التي تهم
إذا كنت على لينكس أو مك أوس، diff مُثبت بالفعل. الاستخدام الأساسي هو:
diff file1.txt file2.txt
لكن الناتج الافتراضي مختصر. هذه الأعلام تجعله قابلًا للقراءة:
# Unified format (same as Git's diff output — most familiar)
diff -u file1.txt file2.txt
# Side-by-side comparison
diff -y file1.txt file2.txt
# Ignore whitespace differences (useful for formatting changes)
diff -w file1.txt file2.txt
# Combine: unified format, ignore whitespace
diff -uw file1.txt file2.txt
ناتج مُوحد مُثال:
--- file1.txt 2026-03-01 10:00:00
+++ file2.txt 2026-03-05 14:30:00
@@ -1,4 +1,4 @@
server {
- listen 80;
+ listen 443;
server_name example.com;
}
الأسطر التي تبدأ بـ - تم حذفها، + تم إضافتها. السطور بدون تسمية هي سياق غير متغير.
المقارنة الثلاثية: عندما يكون لديك ثلاث نسخ
تُقارن المقارنة القياسية بين ملفين. أما المقارنة الثلاثية فهي تتعامل مع النسخة الثالثة — الأصل المشترك. هذا هو الطريقة التي تعمل بها حلول تعارض التكامل، حتى خارج جِت.
ال diff3 التعليمات تتعامل معها:
diff3 mine.txt base.txt theirs.txt
هذا يُظهر ما تغير في mine.txt — أي منهما تحتاجه؟ base.txt، وما تغير في theirs.txt — أي منهما تحتاجه؟ base.txt — تُشير إلى أي تعارض. مفيدة عندما يقوم شخصان بتعديل نفس الوثيقة بشكل مستقل، ويجب أن تُعاد توحيد النسخ دون استخدام تكامل جِت.
المقارنة البرمجية: بايثون ونود
عندما تحتاج إلى مقارنة داخل سكربت — أو إضافة مقارنة نصية إلى تطبيق — استخدم مكتبة بدلًا من التوجه إلى diff.
بايثون — difflib:
import difflib
text1 = open("file1.txt").readlines()
text2 = open("file2.txt").readlines()
diff = difflib.unified_diff(text1, text2, fromfile="file1.txt", tofile="file2.txt")
print("".join(diff))
difflib تتضمن أيضًا HtmlDiff لإنتاج ناتج مُقابل بجانب، و SequenceMatcher لإيجاد نسبة التشابه بين نصين — مفيد للبحث عن تطابق غير دقيق.
نود diff الباقية:
npm install diff
const Diff = require('diff');
const one = 'SELECT id, name FROM users WHERE active = 1;';
const two = 'SELECT id, name, email FROM users WHERE active = 1 LIMIT 100;';
const changes = Diff.diffWords(one, two);
changes.forEach(part => {
if (part.added) process.stdout.write('\x1b[32m' + part.value + '\x1b[0m');
else if (part.removed) process.stdout.write('\x1b[31m' + part.value + '\x1b[0m');
else process.stdout.write(part.value);
});
ال diff تُدعم مقارنة حروف، كلمات، سطور، جمل، JSON، وCSS بشكل مدمج.
عندما يكون استخدام أداة عبر الإنترنت هو الخيار المناسب
التعليمات سريعة إذا كان لديك مُستندان مُوجودان على القرص. لكن عندما تقارن نصًا نسخه من مصادر مختلفة — مثل خيط سلوك أو ردود API أو محتوى المُلصق — ففتح سطر الأوامر وكتابة ملفات مؤقتة يكون مُفرطًا.
أداة مقارنة نصية عبر المتصفح هي السرعة الأسرع في الحالات التالية:
- مُقارنات فردية بدون ملفات على القرص
- مشاركة مقارنة مع شخص لا يستخدم المُدخلات
- فحص تغيير قبل وبعد نسخة دون أي إعداد
IO Tools مقارنة نصية تُعالج هذا مباشرة في المتصفح مع تضمين التنسيق ولا يتطلب إرسال ملفات. نسخ النصين، وانظر التغييرات فورًا.
مُقارنة البيانات المُهيكلة: JSON وYAML مختلفان
تُعالج المقارنة النصية خطًا بخط. يحتوي JSON وYAML على هيكل — والاختلافات في التنسيق (الإسقاط، ترتيب المفاتيح) تُنتج ضوضاء غير ذات معنى في مقارنة عادية.
لـ JSON، ابدأ بالتنقيح أولًا:
jq --sort-keys . file1.json > file1_normalized.json
jq --sort-keys . file2.json > file2_normalized.json
diff -u file1_normalized.json file2_normalized.json
هذا يُزيل التغيرات في التنسيق ويُظهر فقط التغييرات الحقيقية في المحتوى. أما بالنسبة لـ YAML، فإن أدوات مثل dyff تُفهم الهيكل وتُبلغ عن التغييرات بشكل مُعرفي بدلًا من خط بخط.
| الاستخدام | أفضل أداة | ملحوظات |
|---|---|---|
| ملفات نصية بسيطة | diff -u | مُتاحة في كل مكان |
| مُقارنة جانبية في المُدخلات | diff -y | مُخرج واسع، مناسب للملفات القصيرة |
| حل التعارضات (بدون جِت) | diff3 | مُقارنة ثلاثية |
| مُقارنة داخل سكربت أو تلقائية | بايثون difflib أو نود diff | إضافة إلى أنظمة أو تطبيقات |
| مُقارنة سريعة عبر الوضع | IO Tools مقارنة نصية | مُبنية على المتصفح، بدون إعداد |
| JSON مع ضوضاء في التنسيق | jq تنقيح + diff | ترتيب المفاتيح، ثم المقارنة |
| يامل | dyff, yamldiff | مُدرك الهيكل، أفضل إشارة |
أي أداة في أي وقت
- ملفان موجودان على القرص →
diff -u - الحاجة إلى تجاهل الفراغات →
diff -uw - ثلاثة نسخ للاستدلال →
diff3 - بناء سلسلة أو سكربت →
difflibأو الdiffمُتجرّب نمط - مُقارنة بين نسختين من المُلصق في المتصفح → IO Tools مقارنة نصية
- مُقارنة JSON → تنقيح باستخدام
jq، ثمdiff - مُقارنة YAML → استخدم
dyff
الطريقة الأسرع هي أي أداة تتناسب مع نقطة البداية. إذا كان النص مُوجودًا في مُلصقك، فإن أداة مقارنة عبر المتصفح تفوق أي عملية تتعلق بالطرف المُدخل. إذا كان النص في ملفات، فإن diff مُتوفر بالفعل على جهازك.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
