Fark algoritmaları nasıl çalışır
Bu sayfadaki her fark görünümü Myers algoritması tarafından üretilir — Eugene W. Myers’ın 1986’da geliştirdiği ve D düzenleme mesafesiyle O((N+M)D) sürede iki belirteç dizisi arasındaki en kısa düzenleme betiğini bulan bir teknik. Algoritma En Uzun Ortak Alt Dizi problemine dayanır; motor, açık kaynaklı jsdiff kütüphanesini kullanarak tamamen tarayıcınızda çalışır.
- Girdileri belirteçlere ayır — Karşılaştırmadan önce algoritma her girdiyi belirteç dizisine böler. Satır ayrıntısı satır sonlarına göre böler; kelime ayrıntısı boşluk ve noktalama sınırlarına göre böler; karakter ayrıntısı her Unicode kod noktasını kendi belirteci olarak işler.
- Düzenleme grafiğini oluştur — Myers algoritması karşılaştırmayı, sağa hareketin "orijinalden sil", aşağı hareketin "değiştirilmişten ekle", çapraz hareketin ise "her ikisinde de eşleşen belirteç" anlamına geldiği 2 boyutlu bir ızgara üzerindeki yol olarak modeller. Algoritma en kısa çapraz ağırlıklı yolu bulur.
- En Uzun Ortak Alt Diziyi çıkar — En kısa yoldaki çapraz hareketler En Uzun Ortak Alt Diziyi izler — her iki girdide de aynı göreli sırada görünen belirteçler. Alt dizideki her belirteç "değişmemiş"; geri kalanlar ekleme veya silmedir.
- Ön işleme seçeneklerini uygula — "Büyük/küçük harf duyarsız" seçeneğini etkinleştirirseniz her iki girdi de Alt Dizi geçişinden önce küçük harfe dönüştürülür; böylece "MERHABA" ile "merhaba" özdeş sayılır. "Boşlukları yoksay" birden fazla boşluğu tek boşluğa dönüştürür. "Her satırı kırp" karşılaştırmadan önce satır başındaki ve sonundaki boşlukları kaldırır.
- Seçilen görünümü oluştur — Çıktı, aynı Alt Dizi sonucunun üç farklı şekilde görüntülenmesidir: Yan yana, orijinali solda ve değiştirilmişi sağda kırmızı ve yeşil satır vurgulamasıyla iki sütunlu ızgarada gösterir. Birleşik,
git diffçıktısına benzer şekilde − ve + önekli satırlarla tek sütun gösterir. Satır içi, aynı metin akışında silmeleri kırmızı üstü çizili, eklemeleri yeşil altı çizili olarak gösterir. - Özet şeridini hesapla — Oluşturmadan sonra araç kaç belirtecin eklendiğini, silindiğini ve değişmediğini sayar, ardından benzerliği değişmemiş belirteçlerin iki girdi uzunluğunun büyüğüne oranı olarak hesaplar. %100 benzerlik, ön işleme seçenekleri uygulandıktan sonra girdilerin özdeş olduğu anlamına gelir.
Neden fark denetleyicisi kullanılır
- Git istemcisi olmadan kod incelemesi — Bir yapılandırma dosyasının, SQL geçişinin veya kabuk betiğinin iki sürümünü yapıştırın; depo klonlamak, dal değiştirmek veya CI hattını beklemek zorunda kalmadan neyin değiştiğini görün. Bu araç çift programlama sırasında hızlı incelemeler için, diğer tarafın Git geçmişini paylaşmadığı yüklenici teslimlerinde ve tamamen sürüm kontrolü öncesinde kalan eski kod tabanları için kullanışlıdır. Birleşik görünüm, sohbet mesajına veya bilete doğrudan kopyalayabileceğiniz çıktı üretir.
- Sözleşme ve belge redline takibi — Kelime düzeyinde fark, Word’ün Değişiklikleri İzle panelinden daha hızlı sözleşme taslakları arasındaki terim değişimlerini gösterir. Birinci taslaktan A maddesini ve imzalanmış kopyadan B maddesini yapıştırın; yer değiştirme tam kırmızı-yeşil olarak görünür. Hukuk asistanları ve tedarik ekipleri sözleşme imzalanmadan önce son dakika değişikliklerinin incelemeyi atlatıp atlatmadığını doğrulamak için bunu kullanır.
- Deneme ve taslak revizyonları — Yazarlar, her iki kopyayı yeniden okumadan her değişikliği, eklemeyi ve kesmeyi görmek için kelime ayrıntısını seçebilir. Aynı iş akışı, çevirmenlerin kaynak metne göre değişiklikleri denetlemesi, editörlerin kopya düzenlemesinin yazarın sesini koruduğunu kontrol etmesi ve gazetecilik ekiplerinin yayımlanan makaleyi dosyalanan taslakla uzlaştırması için de işe yarar.
- Günlük ve yapılandırma karşılaştırması — İki sunucu yapılandırma anlık görüntüsünü, iki cron zamanlamasını veya iki
ps auxçıktısını karşılaştıran sistem yöneticileri, 200 satırlık bir dosyadaki tek değiştirilmiş parametreyi saniyeler içinde bulmak için satır ayrıntısı kullanabilir. Boşlukları-yoksay seçeneğiyle birleştirin; gürültülü hizalama odaklı fark, gerçekten önemli olan parametre değişikliklerine daralır.
Yaygın uygulamalar
Metin farkı, yazma, geliştirme ve operasyon çalışmalarında her düzenleme döngüsünün sonunda karşımıza çıkar.
- Pull request incelemesi: mantık değişikliğini dalı kontrol etme zahmetine girmeden anlamak için iki işlev uygulamasını yan yana yapıştırın.
- Yerelleştirme kalite güvencesi: çevirmenlerin getirdiği ekleme, eksiklik veya terminoloji değişimlerini tespit etmek amacıyla İngilizce kaynak dizeyi kelime düzeyinde çevrilmiş eşdeğeriyle karşılaştırın.
- Olay analizi: bir kesintiye yol açan yapılandırma değişikliğini yalıtmak için iki Kubernetes manifest anlık görüntüsünü veya iki "docker inspect" çıktısını satır düzeyinde farklılaştırın.
Gerçek bir örnek
Beş satırlık bir sunucu yapılandırması ele alalım. Orijinal: host=localhost, port=5432, dbname=app_db, user=app, password=secret. Değiştirilmiş: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. Satır ayrıntısı ve Yan yana görünümüyle 1. satır solda kırmızı (host=localhost) ve sağda yeşil (host=db.prod.example.com), 4. satır solda kırmızı (user=app) ve sağda yeşil (user=app_prod), 2., 3. ve 5. satırlar ise her iki tarafta da değişmemiş görünür. Özet şeridi 2 ekleme, 2 silme, 3 değişmemiş ve %60 benzerlik bildirir. Kelime ayrıntısına geçin; fark daha da daralır: yalnızca 1. ve 4. satırlarda = işaretinin sağındaki değerler vurgulanır, anahtarlar değişmemiş kalır ve Alt Dizi artık host, user ve çevreleyen noktalama işaretlerini korunmuş olarak saydığından benzerlik yaklaşık %85’e yükselir.
Bu tarayıcımda mı çalışıyor?
Evet. Tüm fark hesaplama, sayfayla birlikte yüklenen açık kaynaklı jsdiff kütüphanesini kullanarak istemci tarafında çalışır. Yazdığınız, yapıştırdığınız veya karşılaştırdığınız hiçbir şey sunucuya gönderilmez. Bunu kendiniz doğrulayabilirsiniz: tarayıcı DevTools’unu açın, Ağ sekmesine geçin, günlüğü temizleyin, Karşılaştır’a tıklayın ve karşılaştırma adımı için sıfır ağ isteği tetiklendiğini onaylayın.
Benzerlik yüzdesi ne anlama geliyor?
Benzerlik, değişmemiş belirteçler / maks(orijinaldeki toplam belirteç, değiştirilmişteki toplam belirteç) olarak hesaplanır. %100 skor, ön işleme seçenekleriniz (büyük/küçük harf katlaması, boşluk daraltma, satır kırpma) uygulandıktan sonra iki girdinin özdeş olduğu anlamına gelir. %0 skor, girdiler arasında hiçbir belirtecin ortaklaşmadığı anlamına gelir. Metrik, düzenleme mesafesinin kabaca bir yaklaşımıdır — hızlı bir gösterge olarak kullanışlıdır — intihal veya özgünlük skoru değildir.
JSON / YAML / XML’i anlamsal olarak fark edebilir miyim?
Bu araçta hayır. Bu metin düzeyinde bir farktır; yalnızca biçimlendirmeden kaynaklanan JSON veya XML değişiklikleri, veriler mantıksal olarak özdeş olsa bile çok sayıda değişiklik gösterir. JSON’da nesne anahtarlarını yeniden sıralamak da çoğu ayrıştırıcı anahtar sırasını önemsemese bile değişiklik olarak görünür. Ayrıştırılmış nesne ağaçlarını karşılaştıran ve anahtar sırasını ve biçimlendirmeyi yoksayan gerçek bir anlamsal fark için ayrılmış bir JSON Fark aracı planlamaktayız. Şimdilik, her iki girdiyi de yapıştırmadan önce aynı girintileme ve anahtar sırasına normalleştirin.
Birleşik ve yan yana görünümler nasıl farklılaşır?
Yan yana iki sütun oluşturur: solda orijinal ve sağda değiştirilmiş sürüm; solda kaldırılan satırlar kırmızıyla, sağda eklenen satırlar yeşille vurgulanır. Değişmemiş satırlar her iki sütunda da aynı satırda hizalı görünür. Birleşik, git diff’in terminalinize yazdığıyla aynı düzende — kaldırılan satırlar için − öneki ve kırmızı zemin, eklenen satırlar için + öneki ve yeşil zemin ile — tek sütun oluşturur. Sonucu yama dosyası olarak kopyalamak veya kod inceleme mesajına yapıştırmak istediğinizde birleşik görünümü kullanın. Neyin neyle değiştiğinin görsel hizalaması ham yama metninden daha önemli olduğunda yan yana görünümü kullanın.
Orijinali sola, değiştirilmiş sürümü sağa yapıştırın, görünüm ve ayrıntı seviyesi seçin; karşılaştırma milisaniyeler içinde görünür. Canlı modu açın ve her iki tarafı düzenlerken fark her tuş vuruşunda yeniden çalışır. Sonucu, git apply’ın doğrudan tükettiği standart birleşik .patch dosyası olarak indirin. Yükleme yok, hesap yok, harici API anahtarı yok, kota yok.