🔍
← Rehberlere dön

Diff Çıktısı Nasıl Okunur: Patch Dosyalarını ve Değişiklikleri Anlama

· Etiketler: diff-output, unified-diff, patch-file, diff-format, git-diff

Diff Çıktısı Nasıl Okunur: Patch Dosyalarını ve Değişiklikleri Anlama

Diff çıktısı, sürüm kontrol sistemlerinin evrensel dilidir. Her geliştirici diff çıktısıyla düzenli olarak karşılaşır — kod incelemesi sırasında, merge conflict'leri çözerken veya açık kaynak katkılarından patch uygularken. Yine de birçok geliştirici diff çıktısını verimli bir şekilde okumayı asla öğrenmez.

Bu kılavuz, diff çıktısının en yaygın biçimlerinde nasıl okunacağını, patch dosyalarının nasıl çalıştığını ve değişiklikleri güvenle nasıl yorumlayacağınızı açıklar.

Diff Çıktısı Nedir?

Diff çıktısı, iki dosya veya dosya kümesi arasındaki farkların yapılandırılmış bir temsilidir. 1970'lerde Bell Labs'da Douglas McIlroy tarafından oluşturulan diff aracı, Git, Mercurial ve diğer çoğu sürüm kontrol sisteminin temelini oluşturmaya devam etmektedir.

git diff veya herhangi bir diff komutunu çalıştırdığınızda, çıktı tam olarak neyin değiştiğini, nerede değiştiğini ve nasıl değiştiğini gösterir — hem insanların hem de makinelerin okuyabileceği bir biçimde.

Birleşik Diff Biçimini Anlama

Birleşik diff biçimi, bugün en yaygın kullanılan çıktı biçimidir. Değişiklikleri, her biri dosya içindeki değişikliği bulmanıza yardımcı olan bağlam satırlarıyla başlayan parçalar (hunks) halinde gruplandırır.

Bir Parça Başlığının Anatomisi

Her parça şuna benzeyen bir başlıkla başlar:

@@ -başlangıç,sayı +başlangıç,sayı @@

Bunu parçalara ayıralım:

| Kısım | Anlamı | |------|---------| | @@ | Bir parçanın başlangıcını işaretleyen sınırlayıcılar | | -3,7 | Orijinal dosyada bu parça 3. satırda başlar ve 7 satırı kapsar | | +3,8 | Yeni dosyada bu parça 3. satırda başlar ve 8 satırı kapsar | | @@ | Kapanış sınırlayıcıları |

Başlıktan hemen sonraki bağlam satırı (genellikle bir fonksiyon adı veya yakındaki bir yorum), değişikliğin dosyanın hangi kısmına ait olduğunu belirlemenize yardımcı olur.

Bir Parçadaki Satırlar

Bir parça içindeki her satır tek bir karakterle ön eklenir:

 bağlam satırı (değişmemiş)
-silinen satır (eski dosyada yok, yenide var)
+eklenen satır (yeni dosyada var, eskide yok)
  • Bağlam satırları bir boşlukla başlar. Bunlar her iki sürümde de aynıdır ve referans noktaları sağlar.
  • Silinen satırlar eksi işareti (-) ile başlar. Bunlar eski dosyada bulunur ancak silinmiştir.
  • Eklenen satırlar artı işareti (+) ile başlar. Bunlar değiştirilmiş dosyada yenidir.

Pratik Örnek

İşte değiştirilen bir fonksiyonu gösteren bir diff:

@@ -5,7 +5,9 @@
 def greet(name):
-    print("Hello, " + name)
-    print("Welcome!")
+    message = f"Hello, {name}!"
+    print(message)
+    print("We are glad to see you.")
+
     if name == "admin":
         print("You have admin privileges.")

Bu diff'i okumak:

  • Eski sürüm "Hello, " artı ismi, ardından "Welcome!" yazdırıyordu.
  • Yeni sürüm biçimlendirilmiş bir mesaj dizesi oluşturur, onu yazdırır, fazladan bir karşılama satırı ekler ve admin kontrolünü değiştirmeden tutar.
  • İki satır silindi (- satırları), üç satır eklendi (+ satırları) ve boş + satırı okunabilirlik için bir boş satırı korur.

Patch Dosyaları: Uygulayabileceğiniz Diff'ler

Bir patch dosyası, basitçe bir dosyaya kaydedilmiş bir diff'tir — geleneksel olarak .patch veya .diff uzantısıyla. Patch dosyaları, tüm kod tabanını paylaşmadan değişiklikleri paylaşmanın taşınabilir bir yolu olarak hizmet eder.

Patch Oluşturma

Git kullanarak, son commit'inizden bir patch oluşturun:

git format-patch HEAD~1

Veya commit edilmemiş değişikliklerden bir patch oluşturun:

git diff > my-changes.patch

Patch Uygulama

Bir hedef depoya patch uygulayın:

git apply my-changes.patch

Veya klasik patch komutunu kullanın:

patch -p1 < my-changes.patch

-p1 bayrağı, dosya yollarından ilk dizin bileşenini çıkarır; bu, patch oluşturan ile uygulayan arasındaki dizin yapısı farklılıklarını hesaba katar.

Yaygın Diff Çıktı Biçimleri

Birleşik diff'in ötesinde, şu biçimlerle karşılaşabilirsiniz:

Normal Diff

Orijinal diff komutunun varsayılan çıktısı. Değişiklikler, a (ekleme), c (değiştirme) ve d (silme) gibi komutlar kullanılarak satırları değiştirme, ekleme veya silme talimatları olarak gösterilir.

3c3
< Hello world
---
> Hello beautiful world

Bağlam Diff'i

Her değişikliğin etrafında üç satır bağlam sağlayan daha eski bir biçim. Değişen satırları belirtmek için ünlem işaretleri kullanır.

Yan Yana Diff

Tek dosya biçimi değildir — bunun yerine iki sütunu yan yana gösterir. Bu, grafiksel fark araçlarında ve çevrimiçi fark denetleyicilerinde yaygındır.

Kod İncelemelerinde Diff Çıktısını Okuma

Bir pull request'i incelerken şu öğelere odaklanın:

  1. Parça başlıkları: size hangi dosyaların ve fonksiyonların etkilendiğini söyler.
  2. Eklenen ve silinen satırların oranı: kritik dosyalarda çok sayıda değişiklik daha yakın dikkat gerektirir.
  3. Bağlam satırları: size çevreleyen mantığı gösterir, değişikliğin doğru olup olmadığını değerlendirmenize yardımcı olur.
  4. Yalnızca boşluk değişiklikleri: birçok fark aracı bunları farklı şekilde vurgular, çünkü incelemeyi dağıtabilirler.

Diff'leri Yorumlamak İçin En İyi Uygulamalar

  • Diff'leri yukarıdan aşağıya, dosya dosya okuyun — bu, değişikliklerin yapıldığı sırayla eşleşir.
  • Değiştirilmiş kodun yakınındaki değişmemiş bağlam satırlarına dikkat edin; eski ve yeni kod arasındaki yapısal ilişkiyi ortaya koyarlar.
  • Diff görünümünde sözdizimi vurgulamayı destekleyen bir araç kullanın — renk, desenlerin fark edilmesini kolaylaştırır.
  • Büyük diff'leri incelerken, yazarın hangi davranışı değiştirmeyi amaçladığını anlamak için test dosyalarından başlayın.

Diff çıktısını anlamak, işbirlikçi geliştirme için temel bir beceridir. Diff'leri okumada rahat olduğunuzda, kod incelemelerini, merge conflict'leri ve patch dosyalarını çok daha büyük bir güvenle yöneteceksiniz.

Diff Çıktısı Nasıl Okunur: Patch Dosyalarını ve Değişiklikleri Anlama - CoolTool