Her ajana ayrı bir checkout
İki ajan aynı klasörde çalışırsa birbirinin işini ezer. Worktree her oturuma kendi dosyalarını ve kendi dalını verir, paralel işler siz birleştirene kadar ayrı kalır.
Aynı klasör neden olmuyor
Aynı repoda iki Claude Code oturumu açın ve ikisinden iki farklı özellik isteyin. İkisi de aynı dosyaları okuyor, aynı dosyaları düzenliyor ve test paketini, öbürünün altından çekip aldığı bir ağaç üzerinde çalıştırıyor. Kırmızı çıkan test sizin olabilir, diğer ajanın yarım kalmış değişikliği de olabilir.
Sorun model değil. Tek bir çalışma klasörü aynı anda yalnızca tek bir durumu tutabilir. Çözüm klasörü paylaşmaktan vazgeçmek.
Worktree ne veriyor
Git worktree, aynı reponun ikinci bir checkout'u: kendi klasöründe, kendi dalında. Geçmiş ve nesneler ortak, bu yüzden ucuz. Düzenlediğiniz dosyalar ortak değil, bu yüzden oturumlar birbirinin ayağına basamıyor.
Claude Code bunu yerleşik olarak getiriyor. claude --worktree name (ya da -w), .claude/worktrees/<name>/ klasörünü worktree-<name> adlı bir dalda oluşturup oturumu orada başlatıyor. İsim vermezseniz bright-running-fox gibi rastgele bir isim çıkıyor.
.claude/worktrees/ satırını .gitignore'a ekleyin. Yoksa bu klasörler ana checkout'ta izlenmeyen dosya olarak görünür.
İki oturum farklı özelliklere dokunsa bile aynı klasörde çalışmak neden sorun?
Doğru yerden başlamak
Yeni dalın nereden başlayacağı bir ayar: worktree.baseRef. Varsayılan "fresh", uzak reponun varsayılan dalından açıyor. "head" yaparsanız worktree yerel HEAD'inizden başlıyor ve push etmediğiniz commit'ler de geliyor. Yeni iş henüz push etmediğiniz bir şeye dayanıyorsa "head" seçin.
Bir pull request üzerinde çalışmak için claude --worktree "#1234" o PR'ın head'inden dal açıyor.
Yeni bir worktree'de yalnızca izlenen dosyalar olur, yani .env yoktur ve hiçbir şey çalışmaz. Böyle dosyaları .worktreeinclude içine gitignore sözdizimiyle yazın, her yeni worktree'ye kopyalanırlar.
Çıkınca ne olur
Temizlik, ne yaptığınıza bağlı.
- İsimsiz ve temiz bir worktree, oturum bitince otomatik silinir.
- İsimli olan size sorar.
- Değişiklik içeren, tutmak mı silmek mi istediğinizi sorar.
Var olan bir ismi yeniden açarsanız iki şeyden biri olur. Worktree temizse ve commit yoksa varsayılan dala sıfırlanır. Aksi halde eski ucundan devam eder. Yani isim sadece etiket değil, yarım kalmış işe dönüş yolu.
Claude kendisi de geçiş yapabiliyor: EnterWorktree ve ExitWorktree araçları oturum ortasında geçişe izin veriyor. Düzenli çalışan bir temizlik, cleanupPeriodDays süresinden eski alt ajan ve arka plan worktree'lerini, içinde iş yoksa siliyor.
İzolasyonun sınırı
Claude Code, ana checkout'u gösteren düzenlemeleri, çalışma klasörlerini ve git yönlendirmelerini (git -C, GIT_DIR) engelliyor. Bu kazaları kapatıyor ama her yolu değil: ana checkout'a düz bir cp engellenmiyor. İzolasyon sizi hatalardan korur. Ajanın yaptığını gözden geçirmenin yerine geçmez.
Gözden kaçması kolay iki ayrıntı var.
- Worktree içinde verdiğiniz "bir daha sorma" onayı ana checkout'un
.claude/settings.local.jsondosyasına yazılır, yani yalnızca o worktree'de değil her yerde geçerli olur. --fork-session, ilk oturumun worktree'sinde değil, komutu başlattığınız klasörde başlar.
Yeni işin dayandığı, push edilmemiş commit'leriniz var. Worktree'nin bunları içermesini hangi ayar sağlar?
Bölüm tamamlandı
Paralel ve gözetimsiz kursunun 6 bölümünden 1. bölümü bitirdiniz.
claude -p aynı ajan döngüsünü bir kez çalıştırıp çıkıyor, böylece onu pipe'layabilir, script'leyebilir ve zamanlayabilirsiniz. Öngörülebilir kalıp kalmayacağını bayraklar belirliyor.
Sonraki bölüm