Git worktree nedir?
Git worktree, aynı git deposuna bağlı birden fazla çalışma klasörü açmanı sağlayan özelliktir. Her klasörde farklı bir dal açık olur; depoyu yeniden klonlamadan iki işi aynı anda yürütebilir, paralel çalışan ajanları birbirinden ayırabilirsin.
Nasıl çalışır?
Normalde bir depo klasöründe tek dal açıktır; başka dala geçmek için değişikliklerini commit’lemen ya da stash’lemen gerekir. Worktree ile ana klasör yerinde kalır, yanına başka bir dalın açık olduğu yeni bir klasör eklenir. Klasörler commit geçmişini ve nesne veritabanını paylaşır, ama her birinin kendi HEAD’i, index’i ve çalışma dosyaları vardır.
Temel komutlar
Worktree’leri yönetmek için birkaç komut yeterlidir.
- git worktree add ../ozellik-a -b ozellik-a: yeni bir dal ve klasör açar.
- git worktree list: açık worktree’leri listeler.
- git worktree remove ../ozellik-a: klasörü kaldırır.
- git worktree prune: elle silinmiş klasörlerin kayıtlarını temizler.
Kodlama ajanları için neden önemli?
Aynı klasörde çalışan iki ajan birbirinin dosyalarını ezebilir, birinin çalıştırdığı test diğerinin yarım kalmış değişikliğine takılabilir. Her ajana ayrı bir worktree vermek bu karışıklığı önler: her ajan kendi dalında çalışır, sonuçları pull request ya da merge ile birleştirirsin. Aynı dosyaya dokunan iki dal birleşirken yine de çakışabilir.
Dikkat edilecekler
Worktree’ler hafif ama birkaç ayrıntı sürpriz yaratabilir.
- Aynı dal aynı anda iki worktree’de açılamaz.
- node_modules, .env ve derleme çıktıları gibi takip edilmeyen dosyalar yeni klasöre gelmez; bağımlılıkları yeniden kurman gerekebilir.
- Her worktree kendi dev sunucusunu çalıştırırsa port çakışmalarına dikkat et.
- İşi biten worktree’yi kaldır; yoksa diskte unutulmuş klasörler birikir.
AgentVera’da worktree
AgentVera worktree’leri paralel ajan çalışmasının temeli olarak kullanır.
- Git panelindeki worktree bölümünden her özellik için ayrı dal ve klasör açar, ajanı doğrudan o klasörde başlatırsın.
- Gece vardiyasında her görev kendi worktree’sinde, night/<tarih>-<konu> dalında çalışır; ajan commit’ler ama push etmez (Pro ve Team).
- Önizleme ortamları, projenin ve her worktree’nin dev sunucusunu dal adını taşıyan kendi adresinde çalıştırır.
- Ajan koordinasyonu, farklı worktree’lerde aynı dosyayı değiştiren ajanlar için birleştirmede çakışma çıkabileceğini söyler.
Sık sorulanlar
Worktree ile branch arasındaki fark nedir?
Branch bir commit dizisinin adıdır; worktree ise bir dalın açık olduğu klasördür. Branch’ler arasında tek klasörde geçiş yaparsın, worktree ile birden fazla dalı ayrı klasörlerde aynı anda açık tutarsın.
Worktree ile depoyu iki kez klonlamak arasındaki fark ne?
Worktree’ler tek bir depoyu paylaşır: commit’ler, dallar ve ayarlar ortaktır, disk kullanımı daha azdır. Bir worktree’de attığın commit diğerinden hemen görünür; ayrı klonlarda push ve fetch gerekir.
Worktree nasıl silinir?
git worktree remove <klasör> ile. Klasörü elle sildiysen git worktree prune kayıtları temizler. Dal silinmez; gerekirse git branch -d ile ayrıca silersin.
Worktree’ler node_modules klasörünü paylaşır mı?
Hayır. Takip edilmeyen dosyalar her klasörde ayrıdır; her worktree’de bağımlılıkları kurman gerekir.