Metin farkı
İki metni yan yana veya birleşik fark olarak karşılaştırın; kelime düzeyinde vurgular, boşluk ve büyük/küçük harf seçenekleri ve kopyalanabilir bir yama ile.
Karşılaştırmak için bir metnin iki sürümünü yapıştırın
Bu araç ne yapar
Bir fark (diff) tek bir soruyu tam olarak yanıtlar: bir metni diğerine dönüştürmek için neyin değişmesi gerekirdi? Kaynağı sola, daha yeni sürümü sağa yapıştırın; araç silinen her satırı, eklenen her satırı ve — değiştirilen bir satırın içinde — farklı olan tam kelimeleri vurgulanmış gösterir. Bu, git'in her commit'te yanıtladığı aynı sorudur; aynı algoritma ailesiyle, tümüyle tarayıcınızda hesaplanır.
Bu son kısım bir fark aracı için çoğundan daha önemlidir: insanların karşılaştırdığı şeyler özel olma eğilimindedir — bir üretim yapılandırmasının iki sürümü, bir iyileştirmeden önceki ve sonraki bir sorgu, dün çalışan yanıt gövdesine karşı bugün başarısız olan. Burada bunlar cihazınızdan asla çıkmaz.
Yan yana ya da birleşik
İki görünüm aynı karşılaştırmayı farklı düzenlenmiş gösterir. Yan yana, kaynağı sola ve değişen metni sağa koyar, eşleşen satırlar hizalanmış — bir belge düzeltmesini okumanın doğal yolu. Birleşik, onları tek bir sütunda iç içe geçirir, silmeler bir eksiyle ve eklemeler bir artıyla öneklenmiş — git log ve kod incelemelerinin kullandığı biçim; daha kompakt ve değişiklikler seyrek olduğunda daha iyi. Her iki görünüm de özgün satır numaralarını kenar boşluklarında işaretler; böylece buradaki bir bulgu doğrudan dosyanıza geri eşlenir.
Farkın nasıl hesaplandığı
Araç, 1986'da yayımlanan ve bugün hâlâ git'in varsayılanı olan Myers fark algoritmasını uygular. Bir metni diğerine dönüştüren en kısa düzenleme betiğini bulur: en az sayıda satır silme ve ekleme. O en azlık, bir farkı okunabilir kılan şeydir — bir değişiklikten sonra kötü yeniden eşitlenen saf bir karşılaştırma tüm blokları değiştirilmiş olarak bildirirken, Myers gerçekten hareket eden iki satırı belirler.
Satırlar önce karşılaştırılır, sonra değişen her satır çifti vurguları üretmek için kelime düzeyinde yeniden karşılaştırılır. Dürüst bir sınırlama: iki metnin neredeyse hiç ortak yanı olmadığında, en az betik araması bir tarayıcı sekmesinin harcaması gerekenden daha çok bellek gerektirir; bu yüzden iki binlik bir düzenleme uzaklığının ötesinde araç, her şeyi değiştirilmiş göstermeye geri döner — ve bunu sessizce değil, bir bildirimle söyler.
Boşluk ve büyük/küçük harf seçenekleri
Birçok fark gerçektir ama ilgisizdir. Sekmelerden boşluklara yeniden girintilenmiş bir dosya, bir düzenleyicinin eklediği sondaki bir boşluk, yeniden büyük harfe çevrilmiş bir anahtar sözcük — hepsi gerçek değişiklikler, hepsi de bilmek istediğiniz şey mantığın değişip değişmediğiyken gürültü. İki onay kutusu yaygın durumları ele alır: biri her satırın kenarlarındaki boşluğu bir kenara koyar, diğeri harf büyüklüğünü bir kenara koyar. Yalnızca neyin değişiklik sayıldığını etkilerler — görüntü her satırı her zaman yapıştırdığınız gibi tam olarak gösterir.
- Kenar boşluklarını yok say — karşılaştırmadan önce baştaki ve sondaki boşluklar ve sekmeler atılır; böylece yalnızca girinti değişikliği artık değiştirilmiş bir satır olarak görünmez. Bir satırın içindeki boşluk hâlâ sayılır.
- Büyük/küçük harf yok say — yalnızca büyük/küçük harfte farklı satırlar ve kelimeler eşit karşılaştırılır. SQL anahtar sözcükleri, HTTP başlık adları ve diğer büyük/küçük harfe duyarsız bağlamlar için yararlıdır.
Kopyalayabileceğiniz yama
Kopyala düğmesi karşılaştırmayı birleşik fark biçiminde üretir — kod değişikliklerinin ortak dili. Her değişiklik bloğu (bir hunk), kapsadığı satır numaralarını adlandıran bir @@ başlığıyla başlar, silinen satırlar bir eksiyle, eklenen satırlar bir artıyla başlar ve dosya biraz kaymış olsa bile değişikliğin konumlanabilmesi için her hunk'ı birkaç değişmemiş bağlam satırı çevreler.
--- a +++ b @@ -1,3 +1,3 @@ server: - port: 8080 + port: 9090 timeout: 30
Bu metin bir kayda ya da bir kod incelemesine yapıştırılabilir, bir meslektaşa gönderilebilir ya da mekanik olarak uygulanabilir: bir dosyaya kaydedilirse, «git apply» ya da Unix patch komutu değişikliği özgününün üzerine yeniden oynatır. Bilmeye değer bir ayrıntı: bir satır sonuyla bitmeyen bir dosya, yamasında «\ No newline at end of file» işaretini alır — araç bu davranışı yeniden üretir, çünkü eksik bir son satır sonu gerçek bir farktır ve aksini varsaymak uygulanmayan yamalar üretir.
Sıkça sorulan sorular
- Her iki metin de aynı görünürken neden bir değişiklik bildiriyor?
- Fark muhtemelen görünmezdir: sondaki boşluklar, sekmelere karşı boşluklar ya da son satırdan sonra eksik bir satır sonu. İlk ikisini elemek için «kenar boşluklarını yok say» seçeneğini açın. Sondaki satır sonu farkı yine de bildirilir — git de onu bildirir, satır-sonu-yok işaretiyle — çünkü hiçbir glif göstermese bile bayt düzeyinde bir fark gerçektir.
- Çok farklı metinler neden tek büyük bir değiştirme olarak görünüyor?
- En az farkı bulmak, metinlerin ne kadar farklı olduğunun karesiyle orantılı bellek gerektirir. Yaklaşık iki bin satır değişikliğinden oluşan bir düzenleme uzaklığının ötesinde araç, kaba bir her-şey-değiştirildi görünümüne geçer ve bir bildirim gösterir. Aynı belgenin iki sürümü için bununla asla karşılaşmazsınız; ilgisiz iki dosyayı karşılaştırmak karşılaştırır.
- Kopyalanan yamayı nasıl uygularım?
- Bir dosyaya kaydedin, sonra depoda «git apply thefile.patch» ya da klasik Unix aracıyla «patch original.txt thefile.patch» çalıştırın. Yama tam olarak özgün metne karşı üretildi; bu yüzden hedef kaymadığı sürece temiz uygulanır.
- Metnimin herhangi biri yükleniyor mu?
- Hayır. Karşılaştırma tümüyle tarayıcınızda çalışır — iki metni görebilecek bir sunucu yoktur. Bunu istemci tarafında yapmanın amacı budur: yapılandırmalar, kimlik bilgileri ve üretim verisi makinenizden çıkmadan karşılaştırılabilir.