השוואת טקסטים (Diff Checker)

השוו שני טקסטים או קטעי קוד שורה אחר שורה. שורות שנוספו, הוסרו או השתנו מודגשות, עד לרמת המילים המדויקות שבהן יש הבדל.

רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה

הדביקו טקסט בשתי התיבות כדי לראות את ההבדלים.

איך משתמשים בכלי השוואת טקסטים (Diff)

  1. הדביקו את הטקסט המקורי בתיבה הראשונה ואת הטקסט ששונה בתיבה השנייה, או פתחו שני קבצים.
  2. ההשוואה מתעדכנת תוך כדי הקלדה. בחרו תצוגת זה לצד זה או מאוחדת.
  3. סמנו התעלמות מרווחים, התעלמות מרישיות או התעלמות משורות ריקות כדי להסתיר רעש כמו הזחה מחדש.
  4. השתמשו בהסתרת שורות זהות כדי להתמקד בשינויים, עם שלוש שורות הקשר סביב כל אחד.
  5. לחצו על העתקה כ-patch או הורדת ‎.diff כדי לקבל unified diff סטנדרטי שאפשר להחיל עם git apply או patch.

איך כלי ההשוואה עובד

הכלי מפצל את שני הקלטים לשורות ומריץ את אלגוריתם ההבדלים של Myers, אותו אלגוריתם O(ND) שמשמש את git diff ואת diff של GNU. הוא מוצא את הרצף הקצר ביותר של הוספות ומחיקות שהופך את המקור לטקסט ששונה, כך שהתוצאה מציגה את מספר השורות המשתנות הקטן ביותר האפשרי. שורות זהות בהתחלה ובסוף מדולגות קודם, ולכן גם השוואה של קבצים עם אלפי שורות כמעט מיידית.

כששורה שהוסרה ושורה שנוספה נמצאות זו ליד זו, הן מוצמדות כשורה ששונתה ומושוות שוב מילה אחר מילה. המילים שבאמת השתנו מקבלות הדגשה חזקה יותר, כך שמשתנה ששמו שונה או מספר שנערך בולטים גם בתוך שורה ארוכה.

תצוגה זה לצד זה לעומת תצוגה מאוחדת

זה לצד זה מציגה את המקור בעמודה אחת ואת הגרסה החדשה בעמודה הסמוכה, עם מספרי שורות לשתיהן. זו התצוגה הנוחה ביותר לסקירת טקסט חופשי, קובצי תצורה ושינויי קוד קצרים. תצוגה מאוחדת משלבת שורות שהוסרו (-) ושורות שנוספו (+) בעמודה אחת, הפורמט שמשמש כלי code review וקובצי patch.

פורמט unified diff‏ (patch)

ה-patch המיוצא עוקב אחר הפורמט של diff -u: כותרת ---/+++, ואחריה hunks שמתחילים ב-@@ -l,s +l,s @@, כאשר l הוא מספר השורה הראשונה ו-s מספר השורות של ה-hunk בכל קובץ. כל hunk כולל שלוש שורות הקשר שלא השתנו, כך שאפשר להחיל אותו עם patch -p0 או git apply גם אם שורות סמוכות זזו.

מתי להשתמש באפשרויות ההתעלמות

  • התעלמות מרווחים מתייחסת לשורות כשוות אם הן שונות רק ברווחים או בטאבים. השתמשו בה אחרי הזחה מחדש של קוד או מעבר מטאבים לרווחים.
  • התעלמות מרישיות שימושית ל-SQL, ל-HTML ולקובצי לוג, שבהם אותיות גדולות וקטנות לא משנות.
  • התעלמות משורות ריקות מסתירה שורות שנוספו או הוסרו רק לצורך ריווח.

שאלות נפוצות

האם הטקסט שלי מועלה לאנשהו?
לא. ההשוואה רצה כולה בדפדפן שלכם עם JavaScript. שום דבר שתדביקו לא נשלח לשרת, כך שאפשר להשוות בבטחה קוד פרטי, חוזים או קובצי תצורה.
עד כמה גדולים יכולים להיות הטקסטים?
קבצים עם עשרות אלפי שורות מושווים בהרבה פחות משנייה במחשב נייד רגיל. מכיוון שעלות האלגוריתם גדלה עם מספר ההבדלים, שני קבצים ענקיים ושונים לגמרי לוקחים הכי הרבה זמן.
אפשר להשוות שני קבצים במקום להדביק?
כן. השתמשו בכפתורי פתיחת קובץ שמעל כל תיבה כדי לטעון קובץ מקומי. הקובץ נקרא על ידי הדפדפן ולעולם לא מועלה.
למה שורה מוצגת כהוסרה ונוספה במקום כשונתה?
שורות מוצמדות כ„שונו” רק כאשר בלוק של שורות שהוסרו נמצא מיד ליד בלוק של שורות שנוספו. אם לשתי השורות יש מעט מאוד טקסט משותף, ההדגשה ברמת המילה מדולגת, כי היא הייתה רועשת יותר מהצגת השורה כולה כמשתנה.
איך משווים אובייקטי JSON?
השתמשו בכלי JSON Diff. הוא משווה את המבנה המנותח, כך שסדר מפתחות ועיצוב לא יוצרים הבדלים מדומים, ומציג את הנתיבים המדויקים שהשתנו.

כלים קשורים