Weave: Git İçin Yeni Bir Birleştirme Algoritması

Weave: Git İçin Yeni Bir Birleştirme Algoritması

Weave, Git'in çözümleyemediği birleştirme çakışmalarını, kod yapısını anlayarak çözümleyen bir algoritmadır. Hem geliştiricilere zaman kazandırır hem de hata oranını düşürür.

Paylas

Weave Nedir?

Weave, Git'in kod birleştirme süreçlerinde ortaya çıkan çakışmaları çözmek için geliştirilmiş bir algoritmadır. Geleneksel Git birleştirmeleri, satır bazında çalışır ve iki dal aynı dosyada değişiklik yaptığında çakışma bildirir. Örneğin:

<<<<<<< HEAD
export function validateToken(token: string): boolean {
 return token.length > 0 && token.startsWith("sk-");
}
=======
export function formatDate(date: Date): string {
 return date.toISOString().split('T')[0];
}
>>>>>>> feature-branch

Bu durumda, aslında iki bağımsız değişiklik olmasına rağmen, Git çakışma bildirir. AI ajanları aynı kod tabanında çalıştığında, bu durum sıkça karşımıza çıkar. Agent A bir fonksiyon eklerken, Agent B tamamen farklı bir fonksiyon ekleyebilir; ancak Git, insan müdahalesi gerektirir.

Weave Nasıl Çalışır?

Weave, Git'in satır bazlı birleştirme yöntemini entity (varlık) düzeyinde birleştirme ile değiştirir. Yani, satırları karşılaştırmak yerine aşağıdaki adımları takip eder:

  • Üç versiyonu (temel, bizim, onların) tree-sitter kullanarak anlamlı varlıklara (fonksiyonlar, sınıflar, JSON anahtarları vb.) ayrıştırır.

  • Varlıkları kimlik (isim + tür + kapsam) üzerinden eşleştirir.

  • Varlık düzeyinde birleştirme yapar:

    • Farklı varlıklar değiştiyse → otomatik olarak çözülür, çakışma olmaz.

    • Aynı varlık her iki tarafça değiştiyse → iç varlık birleştirmesi yapılır, çakışma ancak gerçek anlamda uyumsuzsa gerçekleşir.

    • Bir taraf değiştirirken diğer taraf silerse → anlamlı bir çakışma olarak işaretlenir.

Örneğin, yukarıdaki senaryo Weave ile temiz bir şekilde birleştirilerek her iki fonksiyon da çıktıda yer alır.

Weave ve Git Birleştirme Karşılaştırması

Durum Git (Satır Bazlı) Weave (Varlık Düzeyinde) İki ajan farklı fonksiyonlar ekler Çakışma (yan yana satırlar) Otomatik çözüm Bir ajan fonksiyonu değiştirir, diğer ekler Çakışma (varlık düzeyinde bağlam) Otomatik çözüm Bir ajan değiştirir, diğer siler Çakışma (şifreli diff) Anlamlı çakışma İki ajan aynı fonksiyonu ekler Çakışma (aynı içerik tespit edildi) Otomatik çözüm Farklı JSON anahtarları değişti Çakışma Otomatik çözüm

Git, bağımsız değişikliklerde yanlış çakışmalar üretebilir. Weave ise yalnızca gerçek anlamda çakışmalarda çakışma bildirir.

Gerçek Dünya Ölçümleri

Weave, büyük açık kaynaklı projeler üzerinde gerçek birleştirme işlemleriyle test edilmiştir. Her bir birleştirme için hem Git hem de Weave ile tekrar oynanmış ve insan tarafından yapılan sonuçlarla karşılaştırılmıştır:

  • Zaferler: Git'in çakıştığı ancak Weave'in temiz bir şekilde çözdüğü birleştirme işlemleri.

  • Geri Dönüşler: Weave'in hata eklediği durumlar (tüm reposlarda 0).

  • İnsan Eşleşmesi: Weave'in çıktısının ne sıklıkla insanın yazdığıyla tam eşleştiği.

  • Çözüm Oranı: Weave'in çözebildiği tüm birleştirme işlemlerinin yüzdesi.

Tüm reposlarda sıfır geri dönüşle, her "zafer", geliştiricilerin manuel olarak çözmek zorunda kaldığı yanlış çakışmaların otomatik olarak çözüldüğü yerlerdir.

Çatışma Belirleyicileri

Gerçek bir çakışma meydana geldiğinde, Weave size Git'in sunmadığı bir bağlam sağlar:

<<<<<<< ours — fonksiyon `process` (her ikisi de değiştirildi)
export function process(data: any) {
 return JSON.stringify(data);
}
=======
export function process(data: any) {
 return data.toUpperCase();
}
>>>>>>> theirs — fonksiyon `process` (her ikisi de değiştirildi)

Hemen anlıyorsunuz: hangi varlık çakıştı, türü nedir ve neden çakıştı.

Desteklenen Diller

Weave, TypeScript, JavaScript, Python, Go, Rust, JSON, YAML, TOML ve Markdown dillerini destekler. Desteklenmeyen dosya türleri için standart satır düzeyinde birleştirme yöntemine geri döner.

Kurulum

Build

cargo build --release

Repo İçin:

./target/release/weave-cli setup

Ya da Manuel Olarak:

git config merge.weave.name "Varlık Düzeyinde Anlamlı Birleştirme"
git config merge.weave.driver "/path/to/weave-driver %O %A %B %L %P"
echo "*.ts *.tsx *.js *.py *.go *.rs *.json *.yaml *.toml *.md merge=weave" >> .gitattributes

Artık Git'i normal şekilde kullanabilirsiniz. Yapılandırılmış dosya türleri için git merge otomatik olarak Weave'i kullanacaktır.

Önizleme

Bir birleştirmenin Weave'in ne yapacağını görmek için:

weave-cli preview feature-branch
  • src/utils.ts — otomatik olarak çözüldü

  • değiştirilmemiş: 2, bizim eklenen: 1, onların eklenen: 1

  • src/api.ts — 1 çakışma

  • ✗ fonksiyon process: her ikisi de değiştirildi

✓ Birleştirme temiz olur (1 dosya Weave tarafından otomatik olarak çözüldü).

Sonuç

Weave, Git'in mevcut birleştirme yöntemlerinin ötesinde bir çözüm sunarak, geliştiricilere zaman kazandırırken hata oranını da sıfıra yaklaştırmayı hedefliyor. Bu yenilikçi yaklaşım, yazılım geliştirme süreçlerini daha verimli hale getirebilir.

Etiketler

Şevval Yüce

Yazar

Şevval Yüce

TechPusula yazarı. Teknoloji ve dijital dönüşüm üzerine içerikler üretmektedir.

Tüm yazıları gör

Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yaz

0/2000

İlginizi Çekebilir

Tüm yazılar