Görünüm
Metin boyutu
Yazı tipi
Satır aralığı
1
Bölüm 1 · 3 dk

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.

A oturumu "search" worktree'sinde başlar
B oturumu "billing" worktree'sinde başlar
Her biri yalnızca kendi klasörünü düzenler
Her biri kendi dalına commit atar
Siz sırayla inceleyip birleştirirsiniz

.claude/worktrees/ satırını .gitignore'a ekleyin. Yoksa bu klasörler ana checkout'ta izlenmeyen dosya olarak görünür.

Kendinizi deneyin

İ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.json dosyası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.
Kendinizi deneyin

Yeni işin dayandığı, push edilmemiş commit'leriniz var. Worktree'nin bunları içermesini hangi ayar sağlar?

Devamını okuyun