İçeriğe geç
LeedyBox
Destek ol

Metin Karşılaştırma Nasıl Çalışır?

Bir diff tek bir soruyu yanıtlar: İlk metni ikincisine dönüştürmek için neyin değişmesi gerekir? Bu rehber bir diff aracının yanıtı nasıl bulduğunu, sonucun nasıl okunduğunu ve sonucun gürültüyü değil önemli değişiklikleri göstermesi için iki sürümün nasıl hazırlanacağını açıklar.

Bir Diff Neyi Gösterir?

LeedyBox Metin Karşılaştırma dahil diff araçlarının çoğu metni satır satır karşılaştırır. Sonuçtaki her satır üç türden biridir: değişmeyen (iki sürümde de var), silinen (yalnızca orijinalde) veya eklenen (yalnızca yeni sürümde). Ayrı bir “değiştirilen” türü yoktur; bu yüzden tek bir kelimesini düzenlediğiniz satır iki kez görünür, bir kez silinen, bir kez eklenen olarak:

  Dear customer,
- Your order ships on Monday.
+ Your order ships on Tuesday.
  Kind regards

İşaretler eski bir kuralı izler: silinen için -, eklenen için + ve değişmeyen satırlar için bir boşluk. Genellikle kırmızı ve yeşil olan renkler aynı bilgiyi tekrarlar.

Satırlar Nasıl Eşleştirilir?

Bir diff aracı, iki metinde de aynı sırayla geçen en uzun satır dizisini, yani en uzun ortak alt diziyi arar. Bu satırlar değişmeyen olarak kalır; geri kalan her şey silinen veya eklenen olarak işaretlenir. Orijinal A, B, C, D ve yeni metin A, C, B, D ise en uzun ortak dizi üç satırdır, örneğin A, B, D; bu yüzden C taşınmış gibi görünür: bir yerde silinmiş, başka bir yerde eklenmiş.

Çoğu zaman eşit uzunlukta birden fazla yanıt vardır ve her araç farklı seçer. Aynı dosya çiftinin iki programda biraz farklı diff'ler vermesinin nedeni budur. Git varsayılan olarak Myers algoritmasını kullanır ve alternatif olarak patience ile histogram sunar; bunlar yalnızca kapanış süslü parantezi içeren çok sayıda satırı olan kodda genellikle daha okunur sonuçlar verir.

En uzun ortak diziyi bulmak, bir metnin satır sayısı ile diğerininkinin çarpımıyla büyüyen bir iş gerektirir. LeedyBox aracı önce baştaki ve sondaki aynı satırları ayırır, kalanı karşılaştırır ve bu çarpım 4.000.000'u aşarsa, örneğin yaklaşık 2.000'e 2.000 farklı satırda, bir mesajla durur.

Git ve Kod İncelemelerindeki Unified Diff'i Okuma

Sürüm denetim sistemleri bir dosyanın yalnızca değişen kısımlarını unified diff biçiminde gösterir:

--- a/config.yml
+++ b/config.yml
@@ -12,4 +12,5 @@
 server:
-  port: 8080
+  port: 8081
+  timeout: 30
 database:

--- ve +++ satırları eski ve yeni dosyayı belirtir. @@ -12,4 +12,5 @@ blok başlığı şu anlama gelir: bu blok eski dosyada 12. satırda başlar ve 4 satırı kapsar, yeni dosyada 12. satırda başlar ve 5 satırı kapsar. Her değişikliğin çevresindeki birkaç değişmeyen satır, varsayılan olarak üç tane, bağlam sağlar. LeedyBox'ınki gibi metnin tamamını gösteren araçlarda her satır görünür olduğu için blok başlığı yoktur; aynı nedenle çıktıları yama olarak uygulanamaz.

Yararlı Bir Karşılaştırma İçin Metinleri Hazırlama

Bir diff anlamları değil karakterleri karşılaştırır. Görünmeyen küçük farklar satırları farklı kılar ve gerçek değişiklikleri gölgede bırakabilir:

  • Satır sonundaki boşluklar ve sekmeler ya da bir sürümde sekme, diğerinde boşluk kullanılması. Sondaki boşlukları silin ve ikisinde de aynı girintiyi kullanın.
  • Görünmeyen karakterler, örneğin web sayfalarından ve kelime işlemcilerden kopyalanan metinlerde sık görülen bölünmez boşluk veya sıfır genişlikli boşluk.
  • Unicode biçimleri. é gibi aksanlı bir harf tek bir karakter olarak ya da e artı birleşen bir aksan olarak saklanabilir. macOS dosya adlarından veya bazı PDF'lerden gelen metinler çoğu zaman ikinci biçimi kullanır. Aynı durum ç, ğ, ö, ş ve ü için de geçerlidir.
  • Kıvrık tırnaklar ve tireler. Kelime işlemciler " yerine “ ” ve - yerine – koyar; böylece yapıştırılan kopya özgün düz metinle artık eşleşmez.
  • Satır sonları. Windows satırları CR LF ile, macOS ve Linux LF ile bitirir. Tarayıcılar bir metin kutusundaki her satır sonunu LF'ye çevirir; bu yüzden bu fark LeedyBox aracında görünmez, ancak dosyaları doğrudan karşılaştıran araçlarda görünür.
  • Veri ve kod biçimlendirmesi. Yeniden girintilenmiş veya anahtarları farklı sıralanmış JSON neredeyse her satırı farklı kılar. Önce iki sürümü aynı şekilde biçimlendirin, örneğin sıralı anahtarlar ve aynı girintiyle.

Düzyazı Metinleri Karşılaştırma

Sıradan bir belgede bütün bir paragraf çoğu zaman tek bir uzun satırdır; bu yüzden düzenlenen tek bir kelime bütün paragrafı silinmiş ve eklenmiş olarak işaretler. İki alışkanlık yardımcı olur. Karşılaştırmadan önce her cümleyi kendi satırına koyun; böylece yalnızca değişen cümleler öne çıkar. Ya da satır içindeki kelimeleri karşılaştıran bir araç kullanın, örneğin git diff --word-diff veya kelime işlemcinizin değişiklikleri izleyerek karşılaştırma özelliği.

PDF'ten kopyalanan metnin kendine özgü tuzakları vardır: satırlar sayfa düzeninin böldüğü yerde kırılır ve kelimeler satır sonunda kısa çizgiyle bölünmüş olabilir. Kaynak belgeyle karşılaştırmadan önce her paragrafın satırlarını yeniden birleştirin.

Satır Bazlı Bir Diff'in Gösteremedikleri

  • Taşımalar. Başka bir yere taşınan paragraf bir yerde silinmiş, başka bir yerde eklenmiş olarak görünür. --color-moved ile git gibi bazı araçlar taşınan blokları ayrıca işaretler.
  • Anlam. Aynı şeyi farklı kelimelerle söyleyen iki metin tamamen farklı görünür; “değil” kelimesinin eksik olması gibi tek bir küçük değişiklik ise küçük görünür ama cümlenin anlamını tersine çevirebilir.
  • İkili içerik. Word belgeleri, PDF'ler ve görseller düz metin değildir. Önce metni çıkarın ya da onları oluşturan programın karşılaştırma özelliğini kullanın.

Belgeleri Karşılaştırırken Gizlilik

Sözleşmeler, yapılandırma dosyaları ve günlükler çoğu zaman adlar, anahtarlar veya parolalar içerir. Bazı çevrimiçi karşılaştırma hizmetleri yapıştırılan metni sunucularında saklar, bazen paylaşılabilir bir bağlantıyla. LeedyBox Metin Karşılaştırma tarayıcınızda çalışır ve metni göndermez ya da saklamaz; yine de bir yapılandırma dosyasını herhangi bir yere yapıştırmadan önce gizli bilgileri silmek iyi bir alışkanlıktır.

Sık Sorulan Sorular

Yalnızca bir kelimeyi değiştirdiğim halde neden bütün paragraf değişmiş görünüyor?

Paragraf tek bir satırdır ve satır bazlı bir diff satırların tamamını karşılaştırır. Karşılaştırmadan önce metni cümlelere veya daha kısa satırlara bölün ya da kelime bazlı bir karşılaştırma kullanın.

Boşluk farklarını yok sayabilir miyim?

LeedyBox aracı satırları birebir karşılaştırır. Önce iki metni de temizleyin, örneğin sondaki boşlukları silerek ve sekmeleri boşluğa çevirerek; dosyalar için git, --ignore-space-change gibi seçenekler sunar.

İki Word belgesini nasıl karşılaştırırım?

Word'ün biçimlendirme değişikliklerini de gösteren yerleşik bir Karşılaştır özelliği vardır. Yalnızca metni karşılaştırmak için iki belgenin metnini bir metin karşılaştırma aracına kopyalayın.

Üç yönlü birleştirme (three-way merge) nedir?

İki kişi aynı orijinali düzenlediğinde, bir birleştirme aracı her sürümü ortak orijinalle karşılaştırır. Farklı yerlerdeki değişiklikler otomatik olarak birleştirilir; aynı satırdaki değişiklikler ise birinin çözmesi gereken bir çakışma olarak bildirilir.