« Tüm yayınlar

Git worktree'ler AI kodlama ajanları için izolasyon sağlamaz

Git worktree'lerin AI kodlama ajanları için gerçek bir izolasyon sınırı olmadığını, hook injection ve config sızıntısı örnekleriyle inceliyoruz.

Paralel AI kodlama ajanlarını çalıştıran araçların çoğu, her ajana kendi git worktree'sini veriyor. Ancak worktree'ler refs, config, stash ve hooks gibi kritik durumu ana depoyla paylaşıyor; izole olan sadece çalışma dizini, HEAD ve index. Yazar, git 2.50.1 üzerinde çalışan somut komut dizileriyle bunun ne anlama geldiğini gösteriyor: bir worktree'den yazılan hook, asıl depoda sonraki commit'te host üzerinde kod çalıştırabiliyor; paylaşılan config değişikliği, kendi commit'lerinizin yazar e-postasını sessizce başkasına çeviriyor; tek bir refs/stash paylaşıldığı için bir ajanın stash'lediği iş, hiç istemeden başka bir ajanın worktree'sine düşebiliyor.

Bu davranışlar bug değil, worktree mimarisinin doğal sonucu: .git bir dizin değil, ortak .git'e işaret eden bir dosya. extensions.worktreeConfig veya core.hooksPath gibi önerilen çözümler de işe yaramıyor çünkü bunların kendisi paylaşılan config üzerinden ayarlanıyor ve herhangi bir worktree bu ayarı geri değiştirebiliyor.

Agent'ları konteynerlerde izole etmeye çalışırken linked worktree kullanmak da aynı sorunu taşıyor: konteynere worktree vermek, ana depodaki gerçek .git'i mount etmek anlamına geliyor. Yazının önceki bir sürümünde düzgün izolasyonun (ayrı bir klon) maliyetli olduğu iddia edilmiş, ancak ölçümler bu maliyetin worktree ile aynı olduğunu gösteriyor — yani 'neredeyse sıfır maliyetle izolasyon' vaadinin her iki yarısı da yanlış çıkıyor.