Git Worktrees nedir?
Git ile çalışıyorken branch değiştirmeniz gerektiği anlar olmuştur. Bunda bir problem yok ama branch üzerinde çalışıyorken başka bir branche geçmek istediğinizde o anki değişiklikleri diğer branche geçirmek istemeyebilirsiniz. Klasik git kullanımında bir repository'nin yalnızca tek bir working directory'si olur. Yani aynı anda sadece bir branch üzerinde çalışılabilir. Bazı durumlarda bir branch üzerinde çalışıyorken acil bir mesaj gelebilir ve hotfix atmamız gerekebilir. Bu durumda ya stash yapacaksıniz ya da commit yapacaksınız. Bu pek de güzel bir deneyim değil. Git worktrees tam da bu noktada yardımcı oluyor.
Git worktrees aynı anda birden fazla working tree'yi yönetmenize olanak sağlayan built-in bir özellik. Yani aynı anda birden fazla branch'e check out yapabilmenize izin veriyor.
git worktree komutu ile ana repository'e bağlı ek working directory'ler oluşturabiliriz. Bu directory'ler aynı git geçmişini paylaşır ancak kendi branchlerinde bağımsız çalışabilirler.
$ git worktree add ../feature-x feature-xBu komut:
- Ana repository'nin yanına
feature-xadlı bir klasör oluşturur, feature-xbranch'ine checkout eder.
Artık hem ana klasör de hem de feature-x klasöründe aynı anda farklı branchler üzerinde çalışabilirsiniz.
Sık kullanılan komutlar
- Mevcut worktree'leri listelemek
$ git worktree list- Yeni worktree eklemek
$ git worktree add ../branch-adi branch-adiKlasör ve branch adının aynı olması şart değil ama aynı kullanırsanız karmaşanın önüne geçersiniz.
- Worktree kaldırmak
$ git worktree remove branch-adiÖrnek Senaryo
Diyelim ki dev branch'indesiniz ve büyük bir refacto çalışması yapıyorsunuz. Tam bu sırada production'da bir hata fark edildi ve hotfix geçmeniz gerekiyor.
Normalde yapacaklarınız:
devbranch'i üzerindeki refactor değişikliklerini stash veya commit.git checkout hotfix/login-bug- Hata düzeltmesi yap.
devbranch'ine geri dön ve refactor'e devam et.
Worktree ile yapacaklarınız:
git worktree add ../hotfix-login -b hotfix-login
(-b parametresi, branch mevcut değilse oluşturup checkout eder. Eğer branch zaten varsa -b parametresine gerek yoktur.)
- Yeni klasöre gidip hatayı düzelt.
- Refactor klasörüne dön ve çalışmaya devam et.
Worktree ile yapılacak adımlar ve karmaşa azaldı.
📝 Dipnot: Oluşan worktree'ler bir üst dizinde ana repository'nin yanında oluştuğu için ana repository'yi bir üst klasörde sarmalayabilir ya da worktree'ler için
/project-x-worktreesşeklinde bir üst klasör yapmak isteyebilirsiniz. Bu durumda yeni bir worktree oluştururkengit worktree add ../project-x-worktrees/feature-x feature-xşeklinde kullanmaya dikkat etmelisiniz ki klasör düzeniniz karmaşıklaşmasın.
Git Worktrees, özellikle aynı anda birden fazla branch üzerinde çalışmanız gerektiğinde işleri büyük ölçüde kolaylaştıran bir özellik. Küçük projelerde ihtiyaç duymayabilirsiniz, ancak orta ve büyük projelerde context switch yaparken zaman kazanmak ve düzenli kalmak adına size yardımcı olabilir.