Command Palette

Search for a command to run...

مدقق اختلاف النص: توقف عن التغييرات التي لا يمكنك رؤيتها فعليًا

مدقق اختلاف النص: توقف عن التغييرات التي لا يمكنك رؤيتها فعليًا

T
Toolz Team
|Jul 5, 2026|14 دقيقة قراءة

جزء من مجموعة أدوات النص

أرسل لي أحد عملاء WP Adminify ذات مرة تصديرين لإعدادات المكونات الإضافية الخاصة به - &quot؛ قبل التحديث، كل شيء يعمل؛ بعد ذلك، قائمة الإدارة معطلة. لم يتغير شيء آخر.&اقتباس؛ نقطتان من JSON، كل منهما حوالي 340 سطرًا. قرأتها جنبًا إلى جنب مرتين، واتفقت معه بثقة: متطابقة. لم يتغير شيء. يجب أن يكون خطأنا.

كان &#39؛ر. عندما توقفت أخيرًا عن الثقة في عيني وخلفت بين الملفين، كان هناك على السطر 217: لقد اختفى مفتاح دور القائمة "administrator" إلى "administrator "- مع مساحة زائدة. شخصية واحدة غير مرئية. لقد قرأت ذلك شخصيًا مرتين، لأن العيون البشرية لا تفعل &#39؛ تقارن السلاسل؛ أنها تتطابق مع الأشكال، و administrator و administrator لها نفس الشكل.

لقد غيرت تذكرة الدعم هذه قاعدتي بشكل دائم: إذا كان النصان أطول من حوالي عشرة أسطر، فأنا لا &#39؛ قارنهما بالقراءة. أبدًا. لا تحتوي خوارزمية الفرق على اختصارات لمطابقة الأنماط للخداع - فهي تقارن كل حرف وتبلغ بالضبط عما يختلف. ال أداة فرق النص يقوم Toolz.dev بذلك في متصفحك، مما يعني أن تكوينات العميل والعقود والتعليمات البرمجية التي لم يتم إصدارها لا تترك جهازك أبدًا. هنا &#39؛ كيف يعمل الاختلاف فعليًا وكيفية استخدامه بشكل جيد.

ليرة تركية؛DR: لا تقم أبدًا بمقارنة النصوص التي يزيد طولها عن بضعة أسطر بصريًا - فالعيون تفوت المسافات الزائدة والأرقام المتبادلة والتعديلات المكونة من كلمة واحدة. لصق كلا الإصدارين في أداة فرق النص: الأخضر = مضاف، الأحمر = تمت إزالته، محسوبًا بواسطة نفس عائلة خوارزمية مايرز التي تعمل git diff. يستخدم وضع الخط للكود والتكوينات، وضع الكلمة للنثر والعقود. للبيانات المنظمة، فرق JSON يقارن بالمعنى بدلا من النص. كل شيء يعمل من جانب العميل.


كيف تعمل خوارزمية الفرق فعليًا؟

الفكرة الأساسية: العثور على أطول تسلسل مشترك (LCS) للنصين - أطول تسلسل من الأسطر (أو الكلمات أو الأحرف) التي تظهر في كليهما، بنفس الترتيب. كل شيء في LCS هو &quot؛ دون تغيير.&quot؛ أيًا كان &#39؛ المتبقي في الإصدار أ هو حذف؛ أيًا كان &#39؛ المتبقي في الإصدار ب هو إضافة. أ &quot؛ معدل &quot؛ السطر هو مجرد حذف وإضافة تصادف وجودهما بجانب بعضهما البعض.

الطريقة القياسية لحساب ذلك بكفاءة تأتي من يوجين مايرز &#39؛ ورقة 1986، &quot؛ خوارزمية الفرق O (ND) وتنوعاتها وحصصها؛. الجزء الأنيق هو ما يقوله التعقيد: ن هو حجم الإدخال، ولكن د هو عدد الاختلافات. يختلف نصان متطابقان تقريبًا على الفور تقريبًا بغض النظر عن طولهما، لأن الخوارزمية &#39؛s تعمل بمقاييس مع مدى اختلافهما، وليس فقط حجمهما. هذا &#39؛s لماذا يبدو التمييز بين تكوينين مكونين من 300 سطر يختلفان بخط واحد فوريًا - الخوارزمية لا تفعل شيئًا تقريبًا، وهو بالضبط الموقف الذي تقوم فيه عيناك بأكبر قدر من العمل والفشل.

عائلة الخوارزمية نفسها هي المحرك الافتراضي git diff، جنو diffومعظم أدوات المقارنة أنت &#39؛ لقد استخدمت من قبل. (يعرض جيت أيضًا patience و histogram المتغيرات التي تنتج في بعض الأحيان مجموعات أكثر قابلية للقراءة من قبل الإنسان لنفس التغييرات - تعيين التغييرات هي نفسها، ويختلف العرض التقديمي.)

إحدى الخصائص المهمة غير الواضحة: الفرق ليس فريدًا دائمًا. إذا قمت بإضافة سطر فارغ بين سطرين فارغين موجودين، &quot؛ الذي&quot؛ السطر الفارغ جديد، فهو غامض حقًا، وقد تسلط الأدوات المختلفة الضوء على أدوات مختلفة. كلتا الإجابتين صحيحتان.

اختلاف السطر أو الكلمة أو الحرف - أي وضع ومتى؟

التفاصيل التي تقارنها عند التغييرات هي ما يفيد الإخراج. إن ارتكاب هذا الخطأ هو السبب الرئيسي الذي يجعل الناس يجدون اختلافًا في المخرجات والحصص؛ صاخب.&حصة؛

مستوى الخط مستوى الكلمة مستوى الشخصية
يقارن خطوط كاملة كذرات كلمات فردية الشخصيات الفردية
يظهر تحرير من كلمة واحدة كـ تمت إزالة السطر بالكامل + إعادة إضافته فقط تلك الكلمة فقط الحروف المتغيرة
الأفضل ل التعليمات البرمجية والتكوينات وصفوف CSV النثر والعقود والمستندات الأخطاء المطبعية والتجزئة والسلاسل المشفرة
ضعف تعديلات الفقرة الطويلة: مازلت تصطاد داخل الخط صاخبة عبر النص المعاد تدفقه/المعاد تغليفه غير قابل للقراءة للتعديلات الكبيرة
المستخدم الكلاسيكي git diff الخط الأسود القانوني/المراجعة التحريرية &quot؛ يبدو مفتاحا واجهة برمجة التطبيقات متطابقين وحاصل؛

مثال ملموس. أصلي: The quick brown fox jumps over the lazy dog. معدل: The quick red fox leaps over the lazy cat.

  • وضع الخط ضع علامة على الجملة بأكملها على أنها متغيرة - دقيقة وغير مفيدة.
  • وضع الكلمة يسلط الضوء بالضبط brown→red، jumps→leaps، dog→cat.
  • وضع الحرف هناك مبالغة هنا، لكنه &#39؛s هو الوضع الوحيد الذي يمكن التقاطه admlnistrator مقابل administrator.

القاعدة الأساسية: النص المنظم (بيان واحد ذو معنى لكل سطر) يريد وضع السطر؛ النص المتدفق يريد وضع الكلمة؛ وضع الحرف عبارة عن عدسة مكبرة تقوم بسحبها عندما يقول الاثنان الآخران &quot؛changed&quot؛ ويمكنك &#39؛ لمعرفة السبب. خطأ المسافة الزائدة الخاص بي هو حالة وضع الحرف الأساسية.

متى تكون أداة الفرق المستقلة أفضل من Git؟

فرق Git&#39؛ ممتاز للأشياء التي تعيش في نفس المستودع. قدر مدهش من أعمال المقارنة لا &#39؛t:

تذاكر الدعم. السيناريو من مقدمتي - يتم تصدير إعدادين من العميل. هم &#39؛ ليسوا في أي إعادة شراء. لصق كلاهما في أداة فرق النص وتظهر الإجابة في ثوانٍ بدلاً من قراءتين فاشلتين.

تكوين الانجراف. التدريج تكوين nginx مقابل تكوين nginx الإنتاج. الحالي .env مقابل النسخ الاحتياطي قبل أن تنكسر الأمور. git diff can&#39؛t رؤية الملفات على خادمين مختلفين؛ يمكن النسخ واللصق.

التحقق من المنسق. لقد قمت بتشغيل Prettier (أو PHPCS، أو Black) عبر ملف وتريد تغيير الثقة فيه التنسيق فقط. فرق بين ما قبل وما بعد: إذا رأيت أي شيء آخر غير المسافات البيضاء، والاقتباسات، والفواصل المنقوطة، فإن المنسق لمس المنطق وتريد أن تعرف الآن.

استجابتان لواجهة برمجة التطبيقات. يؤدي التدريج إلى إرجاع جسم JSON واحد، ويعيد الإنتاج جسمًا آخر، ولا تنكسر الواجهة الأمامية إلا في التدريج. فرق الاستجابات. (بالنسبة لـ JSON على وجه التحديد، تفضل فرق JSON- يقارن البنية التي تم تحليلها، لذا فإن ترتيب المفاتيح والمسافات البيضاء don&#39؛t ينشئان نتائج إيجابية كاذبة. قم بتشغيل كلتا الحمولتين من خلال تنسيق JSON أولاً، إذا كنت تريد اختلافًا نصيًا قابلاً للقراءة بدلاً من ذلك.)

المستندات والعقود. يقوم البائع بإرجاع &quot؛ نفس العقد مع تحديثات طفيفة.&quot؛ اختلاف وضع الكلمات هو الطريقة التي تكتشف بها أن شروط الدفع انتقلت من Net 30 إلى Net 15 في مستند مكون من 40 صفحة. لقد عرف المحررون والمحامون هذا إلى الأبد - ويطلقون عليه خطًا أسود أو خطًا أحمر.

ملفات الترجمة والترجمة. مقارنة نسختين من أ .po ملف لمعرفة السلاسل التي تم تغييرها بالفعل قبل إرسالها مرة أخرى إلى المترجمين - سير عمل WP Adminify الحقيقي الذي يوفر الدفع لإعادة ترجمة 400 سلسلة لم تتغير.

الخيط المشترك: في اللحظة التي يوجد فيها كلا الإصدارين كنص يمكنك تحديده، تجيب أداة مختلفة على &quot؛ ما الذي تغير؟&quot؛ ميكانيكيا. ولأن أداة Toolz.dev من جانب العميل، فإن لصق تكوين العميل &#39؛ أو العقد غير الموقع لا ينقلها &#39؛t في أي مكان - نفس الوسيطة مثل بقية صندوق أدوات الخصوصية أولاً.

كيف تقرأ مخرجات مختلفة دون خداع نفسك؟

اتفاقية اللون عالمية: الأحمر هو الإصدار القديم والمحتوى الحصري #39؛s (تمت إزالته)، والأخضر هو الإصدار الجديد &#39؛s (مضاف)، النص غير المتغير يجعل السياق واضحًا. يظهر السطر المتغير كخط أحمر متبوعًا باستبداله باللون الأخضر.

ثلاث عادات تجعل مراجعة الفرق موثوقة بالفعل:

ضع الإصدارات في الفتحات الصحيحة. قديم/أصلي على اليسار (أو الحقل الأول)، جديد/معدل على اليمين. قم بتبديلها وكل إضافة تُقرأ على أنها حذف - I&#39؛ لقد شاهدت الأشخاص يصححون الاتجاه الخاطئ لمدة عشر دقائق بسبب هذا. إذا نظر الإخراج إلى الوراء، فمن المحتمل أن يكون كذلك.

قرر ما هي الضوضاء قبل البدء. مقارنة التعليمات البرمجية المعاد تنسيقها؟ تغييرات المسافات البيضاء هي ضوضاء - تطبيعها أو تجاهلها. مقارنة تكوينات YAML؟ المسافة البيضاء هي معنى- المسافة البادئة هي بنية في YAML، لذا تحقق من صحة كلا الجانبين في مدقق يمل والتعامل مع كل مساحة كإشارة. نفس الأداة والسياسات المعاكسة والاختيار الخاطئ إما يدفن التغيير الحقيقي في الضوضاء أو يخفيه.

اقرأ كل قطعة كبيرة، وليس القطعة الأولى فقط. كانت المساحة الزائدة للعميل &#39؛s هي التغيير #1 من 1. ولكن عندما يظهر الفرق أربعة تغييرات ويشرح الأول أعراضك، يكون إغراء التوقف عن القراءة قويًا - والتغيير #3 هو أحيانًا ما يعضك الأسبوع المقبل. لقد قام الفرق بالفعل بالجزء الصعب؛ don&#39؛ إعادة إدخال خطأ أخذ العينات البشرية في الخطوة الأخيرة.

ما الذي يمكن &#39؛ t اختلاف النص يخبرك؟

يستحق أن نكون صادقين بشأن الحدود:

  • تتم قراءة الكتل المنقولة على أنها حذف + إضافة. قم بقص دالة من أعلى الملف ولصقها في الأسفل: يشير الفرق إلى أنه تمت إزالتها وإضافتها، ولم يتم نقلها. تكتشف بعض الأدوات المتخصصة التحركات؛ عادي LCS لا &#39؛ر.
  • فهو يقارن النص وليس المعنى. 0.1 + 0.2 و 0.3 تختلف باختلاف (هم كذلك) ولكن أيضًا يتصرف بشكل مختلف في النقطة العائمة - والعكس، "key": 1 مقابل "key": 1.0 قد تكون مختلفة نصيًا ولكنها متطابقة لغويًا في لغتك. مقارنة منظمة (مثل فرق JSON) يغلق جزءًا من هذه الفجوة لتنسيقات البيانات.
  • المحتوى الثنائي خارج النطاق. الصور وملفات PDF كبايت وملفات تنفيذية - يحتاج اختلاف النص إلى نص. استخراج النص أولاً، أو استخدام أدوات خاصة بالتنسيق.
  • تتم مقارنة الحالة والتشفير حرفيًا. README ً readme، واقتباس مجعد UTF-8 * اقتباس مستقيم ASCII على الرغم من أنها تبدو متطابقة في معظم الخطوط. (مصيدة أخرى لنمط الشكل للعيون، فوز آخر للخوارزمية.) قم بالتطبيع مسبقًا باستخدام محول الحالة إذا كان ينبغي أن تكون الحالة &#39؛ يهم للمقارنة الخاصة بك.

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

هل يمكنني مقارنة الملفات أم النص الملصق فقط؟

ال أداة فرق النص يعمل على النص الملصق: افتح كل ملف في أي محرر، وانسخ، والصق كلا الجانبين. وهذا يجعله غير متوافق مع التنسيق - يمكن مقارنة أي نص قابل للقراءة &#39؛s (الكود، التكوين، CSV، SQL، النثر)، بغض النظر عن الامتداد.

هل هناك حد لحجم المقارنة؟

الحد العملي هو جهازك وذاكرة #39؛s، نظرًا لأن المعالجة تتم داخل المتصفح. تتم مقارنة الملفات التي تحتوي على بضعة آلاف من الأسطر على الفور؛ خوارزمية مايرز و#39؛ مقاييس التكلفة مع عدد اختلافات، لذلك حتى النصوص الكبيرة ولكن المتشابهة تظل سريعة. قد تستغرق مئات الآلاف من الأسطر ذات الاختلافات الهائلة بضع ثوانٍ.

ما هو وضع الاختلاف الذي يجب أن أستخدمه للتعليمات البرمجية؟

وضع الخط. الكود هو بطبيعة الحال عبارة عن عبارة واحدة لكل سطر، لذا فإن الإخراج على مستوى السطر يتحدد بشكل واضح لكيفية تفكيرك في التغيير. قم بالتبديل إلى وضع الكلمة أو الحرف فقط عندما يتم وضع علامة على السطر على أنه تم تغييره ويمكنك &#39؛ مع اكتشاف الفرق داخله - that&#39؛s عادةً مسافات بيضاء أو علامات اقتباس أو حرف واحد.

ما هو الوضع الأفضل للعقود والنثر؟

وضع الكلمة. عادةً ما تكون تغييرات النثر عبارة عن بدائل للكلمات وإدراج جمل داخل فقرات طويلة؛ سيضع وضع السطر علامة على الفقرات بأكملها ويتركك تبحث. يُظهر التمييز على مستوى الكلمة الكلمات التي تم تغييرها بالضبط - وهو نفس أسلوب الخط الأسود القانوني.

هل يقوم الفرق بتعديل النص الخاص بي أو تخزينه؟

رقم يوجد التمييز فقط في المخرجات المعروضة؛ لم يتغير نص الإدخال الخاص بك، ولأن الأداة تعمل بالكامل من جانب العميل، لا يتم إرسال أي إصدار أو تخزينه في أي مكان. أغلق علامة التبويب وستختفي النصوص.

لماذا يسلط الفرق الضوء على خط يبدو متطابقًا؟

دائمًا ما تكون الأحرف غير مرئية: المسافات الزائدة، وعلامات التبويب مقابل المسافات، وWindows \r\n ضد يونكس \n نهايات الأسطر، أو المسافات غير المتقطعة، أو شبيهات Unicode (علامات الاقتباس المجعدة مقابل علامات الاقتباس المستقيمة). هذه هي بالضبط فئة التغيير التي لا تستطيع العيون البشرية رؤيتها وتلتقطها خوارزميات الفرق دائمًا - كانت تذكرة دعم المساحة الخلفية الخاصة بي واحدة من هذه.

هل يمكنه اكتشاف النص المنقول؟

ليس كخطوة. يُبلغ الاختلاف القياسي المستند إلى LCS عن كتلة تم نقلها كما تم حذفها من الموقع القديم وإضافتها في الموقع الجديد. إذا كنت تشك في حدوث حركة، فابحث في &quot؛added&quot؛ النص الموجود في النص الأصلي - تؤكده النتيجة الدقيقة في مكان آخر من الملف.

كيف يختلف JSON Diff عن Text Diff؟

فرق النص يقارن الأحرف؛ فرق JSON يوزع كلا المستندين ويقارن البنية. تنتج المفاتيح المعاد ترتيبها والمسافة البادئة المتغيرة والفواصل اللاحقة صفر اختلافات هيكلية، لذلك ترى فقط تغييرات في القيم والمفاتيح الفعلية. استخدمه عندما يكون كلا الجانبين صالحين JSON؛ الرجوع إلى فرق النص عندما يكون &#39؛ر.

كيف أتجاهل المسافات البيضاء أو الحالة عند مقارنة النص؟

قرر أولاً ما إذا كانت المسافة البيضاء عبارة عن ضوضاء أم إشارة: في التعليمات البرمجية المعاد تنسيقها، تكون ضوضاء، ولكن في المسافة البادئة YAML أو Python تكون بنية. عندما يتعلق الأمر بالضوضاء، قم بتطبيع كلا الجانبين قبل الاختلاف - قم بانهيار المسافات المتكررة، وقم بتجريد المسافة البيضاء الزائدة، وجعل نهايات الأسطر متسقة - لذلك تبقى تغييرات حقيقية فقط. لتجاهل حالة الأحرف الصغيرة لكلا النصين قبل المقارنة، نظرًا لأن الفرق يعامل README وReadme على أنهما مختلفان افتراضيًا.

ما هي الخوارزمية التي يستخدمها git diff؟

افتراضيًا، يستخدم git diff متغيرًا من خوارزمية مايرز، وهو نفس نهج التسلسل المشترك الأطول من Eugene Myers&#39؛ ورقة بحثية عام 1986 تشترك فيها معظم أدوات الاختلاف. يقدم Git أيضًا متغيرات الصبر والرسم البياني التي يمكنها تجميع التغييرات بشكل أكثر قابلية للقراءة، ولكنها تبلغ عن نفس مجموعة الاختلافات - فقط تغييرات العرض التقديمي. تستخدم هذه الأداة نفس عائلة خوارزميات مايرز.

Frequently Asked Questions

The Text Diff tool works on pasted text: open each file in any editor, copy, paste both sides. That makes it format-agnostic — anything that's readable text (code, config, CSV, SQL, prose) can be compared, regardless of extension.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!