تخطَّ إلى المحتوى

المقارنة بين نصين

الصق النسختين واعرف بالضبط ما تغيّر، جنبًا إلى جنب، حتى مستوى الكلمة الواحدة. الخوارزمية نفسها التي يستخدمها git، لا تخمين سطرًا بسطر ينهار بمجرد إضافة سطر.

  • لا يُخزَّن أبدًا
  • لا طابور ولا انتظار
  • دون تسجيل ودون علامة مائية
العرض

كيف تعمل الأداة

1

الصق النسختين

الأصلية على اليسار، والجديدة على اليمين. أو أفلِت ملفين.

2

اقرأ الفروق

تُميَّز الأسطر المضافة والمحذوفة والمعدّلة، وداخل السطر المعدّل تُظلَّل الكلمات التي تغيّرت بالضبط.

3

تجاهل ما لا يهم

يمكن تجاهل حالة الأحرف والمسافات والأسطر الفارغة كلٌّ على حدة، وتخبرك الصفحة إن كان ذلك هو السبب الوحيد لتطابق النصين.

ما الذي يُعدّ سطرًا متطابقًا

تجري المقارنة على مفتاح لا على السطر نفسه. يُختزل كل سطر إلى مفتاح بحسب خيارات التجاهل المفعّلة، وتُجرى المقارنة على المفاتيح، وما يُعرض عليك هو دائمًا نصك الأصلي، لذا فتفعيل «تجاهل حالة الأحرف» يغيّر الأسطر المتطابقة دون أن يغيّر حرفًا واحدًا مما يُعرض. وهناك خياران منفصلان للمسافات، ويختلفان أكثر مما توحي به تسميتاهما: أحدهما يقص طرفي السطر، والآخر يختزل أولًا كل سلسلة من المسافات وعلامات الجدولة إلى مسافة واحدة ثم يقص الطرفين. لا يحذف أيٌّ منهما المسافات كليًا، والاختزال يبحث عن المسافات وعلامات الجدولة الحرفية فقط، لذا تبقى المسافة الأيديوغرافية أو المسافة غير القابلة للكسر في منتصف السطر كما هي، وتظل تُسجَّل كفرق.

تجاهل الأسطر الفارغة هو الخيار الذي له أثر لا يذكره أحد: تُحذف الأسطر الفارغة قبل أن تبدأ المقارنة، لذا فأرقام الأسطر بجانب النتيجة لا تعدّ إلا الأسطر المتبقية، ولا تعود تطابق أرقام الأسطر في ملفك. ومع إيقاف الخيار تتطابق تمامًا. ويتبع التظليل على مستوى الكلمات داخل السطر المعدّل إعداد تجاهل حالة الأحرف وحده، فخيارات المسافات لا تصل إليه، لذا تظل فروق المسافات داخل سطر تغيّر لسبب آخر تُلوَّن كتغييرات.

النتيجة القابلة للنسخ هي unified diff بكل ما يهم لقراءتها، من ترويستي الملفين، وأسطر الناقص، وأسطر الزائد، وثلاثة أسطر من السياق حول كل تغيير، مع استثناء واحد يستحق المعرفة قبل الاعتماد عليها. علامات المقاطع (hunk) فيها لا تحمل نطاقات أسطر، لذا فهي مصنوعة لبلاغ عن خطأ أو تعليق في مراجعة كود أو بريد إلكتروني، وسيرفضها الأمران patch وgit apply. إن كان ما تحتاجه شيئًا يُطبَّق لا شيئًا يُقرأ، فأنتجه باستخدام git.

عندما تحتاج إلى شيء آخر

الصيغ المنظّمة تُقارَن كأسطر بشكل سيئ، والفشل هنا صاخب لا خفي: فمستندا JSON لا يختلفان إلا في ترتيب مفاتيحهما، أو ملفا CSV نُقل فيهما عمود واحد، يعودان كجدار من التغييرات لا يخبرك بشيء. قارن بينهما بأداة تفهم البنية: رتّب مفاتيح ملفَّي JSON أولًا ثم قارن النتيجتين، أو استخدم daff، الذي يقارن CSV كصفوف وأعمدة ويخبرك بأن عمودًا انتقل بدلًا من أن كل سطر تغيّر.

المقارنة بين مجلدين، أو بين نقطتين في تاريخ مستودع، هي سؤال git لا سؤال هذه الصفحة. وللنثر الذي أُعيد لفّ فقراته، فالعرض القائم على الأسطر هو المستوى الخاطئ تمامًا: الأمر git diff --word-diff يتجاهل مواضع فواصل الأسطر ولا يُظهر إلا الكلمات التي تحركت، وهي المقارنة التي أردتها فعلًا حين يُعاد تدفق مستند.

الأسئلة الشائعة

هل تُخزَّن مستنداتي في أي مكان؟

لا. لا يُخزَّن أي شيء ولا يُرسَل أي طلب، وتظل الأداة تعمل مع قطع الاتصال بالشبكة. وهذا أهم مما يبدو في حالة النصوص: فما يلصقه الناس في أداة أونلاين هو كتابات غير منشورة ومسودات قانونية وأعمال طلاب ومستندات داخلية. وعند المقارنة بين نسختين من عقد أو مسودة، هذا هو بيت القصيد.

لماذا هذا أفضل من المقارنة سطرًا بسطر؟

لأن المرور سطرًا بسطر ينهار بمجرد أن يتحرك أي شيء. أضف سطرًا واحدًا في أعلى الملف، وسيصبح كل سطر تحته في صف مختلف، فتُبلغ المقارنة الساذجة بأن المستند كله تغيّر، وهذا لا يفيد في شيء. أما هنا فتُستخدم خوارزمية Myers، التي يعتمد عليها git diff وdiff(1)، وهي تجد أصغر مجموعة من الإضافات والحذوفات تحوّل نصًا إلى الآخر. أضف سطرًا في الأعلى، وستُبلغ عن سطر واحد مضاف.

هل يمكنها إظهار الكلمات التي تغيّرت، لا الأسطر فقط؟

نعم. حين يكون السطر قد عُدِّل لا أُضيف أو حُذف، يُقارَن مرة أخرى كلمةً بكلمة، ولا تُظلَّل إلا الكلمات التي تغيّرت فعلًا. وفي فقرة طويلة غيّر فيها أحدهم ثلاث كلمات، سترى ثلاث كلمات، لا جدارًا من الألوان.

ماذا تفعل خيارات «التجاهل»؟

تغيّر ما يُعدّ سطرًا متطابقًا. تجاهل حالة الأحرف أو المسافات أو الأسطر الفارغة مفيد عند مقارنة كود أُعيد تنسيقه أو نص أُعيد لصقه. وتفصيل مهم: إذا تطابق نصان فقط لأن شيئًا ما يُتجاهل، تقول الصفحة ذلك صراحةً بدلًا من الإبلاغ بأنهما متطابقان، فـ «متطابقان» و«متطابقان إذا تجاهلت حالة الأحرف» حقيقتان مختلفتان، والخلط بينهما هو ما يجعل أحدهم يسلّم ملفًا ظنّ أنه لم يتغيّر.

هل يمكنني الحصول على النتيجة كملف patch؟

نعم، يمكن نسخ المقارنة كـ unified diff، وهي الصيغة نفسها التي يستخدمها git وملفات patch المرسلة بالبريد، مع بضعة أسطر من السياق حول كل تغيير. وهذه هي الصيغة التي تلصقها في بلاغ عن خطأ.

هل يوجد حد للحجم؟

الحد هو الذاكرة المتاحة، لا حجم ثابت. مقارنة مستندين طويلين سريعة، لأن البداية والنهاية المتطابقتين تُطابَقان وتُتخطَّيان قبل أن يبدأ العمل الفعلي. أما النصان اللذان يختلفان في آلاف المواضع المنفصلة فتُرفض مقارنتهما مع شرح للسبب بدلًا من تجميد علامة التبويب، فمقارنة بهذا الحجم لا يمكن قراءتها أصلًا.

هل يمكنها المقارنة بين ملفات Word أو PDF؟

ليس مباشرة. حوّلها إلى نص أولًا، فأداتا [تحويل PDF إلى نص](pdf-to-text) و[تحويل DOCX إلى TXT](docx-to-txt) تفعلان ذلك بالضبط، ثم الصق النتائج هنا.

معلومة مفيدة: المقارنة محدودة بـ 8,000 فرق. بعد ذلك تتزايد كلفة الخوارزمية بسرعة تكفي لتجميد علامة التبويب، لذا تتوقف الصفحة وتخبرك بدلًا من أن تتعلّق، ويصل مستندان لا علاقة بينهما فعلًا إلى هذا الحد بسرعة. أما مقارنة نسختين من الملف نفسه فنادرًا جدًا ما تصل إليه.

أضِف هذه الأداة إلى موقعك

مجانية لأي مدونة أو صفحة فصل دراسي أو مقالة مساعدة. الصق مقتطفًا واحدًا وسيتمكن زوارك من استخدامها مباشرةً على صفحتك.