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: 1src/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.




