Çok sayıda Claude Code oturumunu paralel olarak yürütüyorum. Bir ajan, rezervasyon akışını yeniden yapılandırıyor, diğer bir ajan yeni bir entegrasyon geliştiriyor ve ben aynı anda üretime bir hotfix göndermem gerekiyor. Hepsi aynı kod tabanında.
Eğer bunu git stash ve Branch değişimleri ile denemişseniz, sıkıntısını biliyorsunuz. Taahhüt edilmemiş değişiklikler, rekabet eden migrations tarafından bozulmuş paylaşılan veritabanları. Bir karmaşa var.
Git worktrees tüm bunları benim için çözdü.
Git Worktrees Nedir?
Git Worktrees Nedir?
Bir worktree, aynı .git geçmişine bağlı, deposunun farklı bir dizinindeki ayrı bir checkout’tur. Her worktree kendi branch’ine, kendi çalışma ağacına, kendi node_modules‘ına ve kendi .env‘ine sahiptir. Ancak aynı git geçmişini paylaşırlar; bu nedenle commits, branches ve remotes senkronize bir şekilde çalışır.
git worktree add .claude/worktrees/feature-billing feature-billing
Ve bu kadar. Artık .claude/worktrees/feature-billing dizininde feature-billing branch’i üzerinde projeyi tam kopyalamış oldunuz. Ana dizininiz tam olarak bulunduğu yerde kalır.
Hiçbir stash yapmanıza gerek yok. Kontekst değişimi yok. “Hangi branch’teyim?” diye düşünmenize gerek kalmaz.
AI Kodlama Ajanları İçin Neden Önemli?
AI Kodlama Ajanları İçin Neden Önemli?
Claude Code (ve benzeri araçlar), kararlı ve izole bir ortamda en iyi şekilde çalışır. Bir ajan veritabanı migration’ını planlarken, başka bir ajan testler yapıyorsa, mevcut çalışma dizinini yanlışlıkla bozmamalıdır.
Worktrees ile, her Claude oturumu kendi sandbox’una sahip olur. Bir ajan, bir özellik branch’inde migration yaparken, diğer ajanın ana branch’te test yazdığı sırada birbirlerinin varlığından haberdar olmayacak.
Ancak burada dikkat edilmesi gereken bir şey var: ham git worktree add komutu yalnızca dosyaları sağlar. Bir Laravel projesi için ayrıca ihtiyaç duyulan şeyler:
- Composer ve npm bağımlılıklarının yüklenmesi
- Kendi veritabanı (ana uygulamanızın kullandığı değil)
- Doğru
APP_URLveDB_DATABASEile kendine ait bir.env - Laravel Herd kullanıyorsanız çalışır bir lokal alan adı
- Çatışmayan bir portta bir Vite dev server
Bunları her seferinde manuel olarak ayarlamak, amacın dışına çıkar.
Her Şeyi Oluşturmak İçin Bir Komut
Her Şeyi Oluşturmak İçin Bir Komut
Tüm süreci gerçekleştiren bir kurulum betiği yazdım. Bir worktree oluşturduğunuzda, bir dakikadan kısa sürede tam işlevsel bir Laravel ortamına sahip olursunuz:
./claude-worktree.sh feature-billing
Arka planda olanlar:
- Yeni bir branch ile git worktree oluşturur
- Ana projeden
.envdosyasını kopyalar ve ayarlar (yeniAPP_URL,DB_DATABASE,VITE_PORT) - Vite için boş bir port bulur (5100–5199 aralığında tarar, her iki
.envdosyasını velsofkomutunu kontrol eder) composer installvepnpm installkomutlarını çalıştırır- Taze bir veritabanı oluşturur
- Migrations ve seeders çalıştırır
- Worktree’yi Laravel Herd ile HTTPS ile ilişkilendirir
- Claude Code’u yeni dizinde başlatır
Sonuç:
Branch: feature-billing
Path: /project/.claude/worktrees/feature-billing
URL: https://feature-billing.myapp.test
Database: myapp_feature_billing
Vite port: 5101
Tamamen izole bir ortam. Kendi veritabanı, kendi alan adı ve kendi portu var. Tarayıcıda ana uygulamanızla yan yana açabilirsiniz ve birbirleriyle etkileşimde bulunmazlar.
Kapatmak İçin Bir Komut
Kapatmak İçin Bir Komut
İşiniz bittiğinde:
./claude-worktree-remove.sh feature-billing
Bu komut veritabanını siler, Herd bağlantısını ve TLS sertifikasını kaldırır, worktree’yi siler ve branch’i temizler. Gitti. Hiçbir kalıntı veritabanı, hiçbir hayali Herd alan adı kalmaz.
Vite Port Problemi
Vite Port Problemi
Bu oldukça can sıkıcıydı. Vite varsayılan olarak 5173 portunu kullanır ve eğer üç worktree’si birden dev server çalıştırıyorsa, ya port için savaşacaklar ya da sessizce rastgele portlar seçecekler.
Kurulum betiği, her worktree’ye rezerve edilmiş bir aralıktan (5100–5199) benzersiz bir port atar. Hem mevcut worktree .env dosyalarını, hem de aktif dinleyicileri kontrol eder. Ardından package.json dev script’ini doğrudan düzeltir:
"dev": "vite --port 5101"Hiçbir yapılandırma dosyası ile uğraşmaya gerek yok. Port komutla birlikte dahildir. Her seferinde çalışıyor.
Laravel tarafında, Vite asetlerini yükleyen Blade direktifi portu .env’den okur:
$port = Env::get('VITE_PORT', '5173');
return ' $port . '/resources/js/app.ts">';
Bu yalnızca geliştirme aşamasında çalışır. Üretimde CDN yapısı kullanılmaktadır, tamamen etkilenmez.
Güvenlik İçin Hook’lar
Güvenlik İçin Hook’lar
Eğer Claude Code kullanıyorsanız, worktree kurulumu ve temizliğini otomatik olarak yöneten hook’lar ekleyebilirsiniz. Bash aracında bir PreToolUse hook’u, Claude’un yapılandırılmamış bir worktree’ye girdiğini tespit edebilir ve kurulum betiğini çalıştırabilir. Başka bir hook ise git worktree remove komutlarını tespit edip dizin silinmeden önce temizliği gerçekleştirebilir.
Bu, Claude’un kendi başına worktree’ler oluşturup silmesi durumunda (ki bunun için yerleşik worktree desteği vardır), her şeyin düzgün bir şekilde kurulup kaldırılmasını sağlar.
Paralel Oturumlarla İlgili Gerçekçi Olmak
Paralel Oturumlarla İlgili Gerçekçi Olmak
Açık olmalıyım ki, aynı anda 2-3’den fazla Claude oturumu etkili bir şekilde yönetemem. Denedim. Bu, StarCraft 2 oynayıp 10 üssü aynı anda yönetmeye çalışmak gibi. O kadar telaşla geçiş yapıyorsunuz ki, birine odaklanmak yerine daha kötü oynuyorsunuz.
Ama benim için bu gerçekten de önemli değil. Belki ben kadar juggling yeteneğiniz vardır, ve bu durumda sorun değil. Ancak benim için asıl değer, yalnızca aynı anda beş ajan çalıştırmak değil, izolasyon ve süreklilik ile ilgilidir.
Bir özellik branch’i başlatabilir, Claude’un bir saat boyunca plan yapmasını ve yapılandırmasını bekleyebilirsiniz, sonra duraklayabilirsiniz. Ana branch’e geçebilir, bir hotfix gönderebilir ve bir destek talebi ile ilgilenebilirsiniz. Daha sonra özellik worktree’nize geri döndüğünüzde her şey tam olarak bıraktığınız gibi kalır. Veritabanı doğru migrations’a sahip, bağımlılıklar yüklenmiş, branch dokunulmamış.
Hiçbir stash açma durumu yok. “Nerede kaldım?” sorusu yok. Yanlış veritabanında migrations çalıştırma durumu yok.
Projenizde Kurulum
Projenizde Kurulum
Tüm süreci bir Claude Code skill olarak paketledim. Kurulumunu yapın, /setup-worktrees komutunu çalıştırın ve Claude her şeyi oluşturur — oluşturma betiği, kaldırma betiği, temizlik mantığı, hook’lar, hepsini.
Paket yöneticinizi tespit eder, .env dosyanızdaki veritabanı kimlik bilgilerini okur, Herd alt alan adlarını uygulama adınızdan türeder. MySQL, PostgreSQL ve SQLite ile uyumludur. Önceden hiçbir şey yapılandırmanıza gerek yoktur.
Gerekenler:
- Laravel projesi, Laravel Herd tarafından barındırılıyor
- Bir veritabanı (MySQL, PostgreSQL veya SQLite)
- Bir git deposu
Elinizde olacaklar:
claude-worktree.sh— tamamen izole bir ortam oluşturmak için bir komutclaude-worktree-remove.sh— hepsini silmek için bir komut- Otomatik kurulum/temizlik için Claude Code hook’ları
- Her worktree başına kendi veritabanı, Herd alan adı ve Vite portu
Skill’ı Yükleyin:
/plugin marketplace add gausejakub/claude-skills
/plugin install laravel-worktrees@gause-claude-skills
Ardından, Claude Code’da /setup-worktrees komutunu çalıştırın. Ve hepsi bu kadar. Tek bir slash komutuyla, tamamen yapılandırılmış bir worktree sistemine sahip olacaksınız.
Eğer farklı bir stack kullanıyorsanız, prensip aynıdır. Her worktree, kendi izole çalışma zamanına ihtiyaç duyar: kendi veritabanı, kendi dev server portu, kendi lokal URL’si. Kurulumu otomatikleştirin, temizliği otomatikleştirin, ve branch geçişleri hiç sorun olmayacaktır.
Kaynak: Orijinal Makale


