· kaynak Hacker News – Front Page (native)
Aynı anda birden fazla dal üzerinde çalışmayı sağlayan Git worktree rehberi Hacker News'in ilgisini çekti
barrd.dev'de yayınlanan bir git worktree eğitimi Hacker News'in ana sayfasına ulaştı; geliştiricilerin tek bir depoyu paylaşan ayrı dizinlerde birkaç dalı nasıl checkout edebileceğini gösteriyor.

Yerleşik bir Git özelliği yeniden ilgi görüyor
barrd.dev'de yayınlanan ve Git'in worktree özelliğini anlatan bir eğitim, Hacker News'in ana sayfasına ulaştı ve dal arasında stash ve checkout ile geçiştiren geliştiricilere bu aracı tanıttı. barrd.dev çatısı altında yazan, Bristol merkezli web geliştiricisi olan yazar, worktree'nin yaklaşık on yıl önce Git 2.5 sürümünden beri Git ile birlikte geldiğini, ancak kendisinin bunu ancak zor bir projeyle boğuşurken, yakın zamanda keşfettiğini belirtiyor.
Temel fikir basit. Dallar arasında sürekli yeniden yönlendirdiğiniz tek bir çalışma dizini yerine, git worktree aynı depoya ek çalışma dizinleri eklemenize olanak tanır ve her biri kendi dalına checkout edilir. Her dizin normal bir checkout gibi davranır: dosyaları düzenler, her zamanki gibi commit ve push yaparsınız. Fark, tüm dizinlerin aynı .git nesne veritabanını ve commit geçmişini paylaşmasıdır; yani altta tek bir depo vardır ama birkaç bağımsız çalışma durumu bulunur.
Dallar ile worktree'ler karşısında
barr.dev'e göre paralel görevleri yönetmenin geleneksel yolu — yarım kalan işi stash'lemek, başka bir dalı checkout etmek, sonra her şeyi geri yüklemek — kırılgandır ve özellikle bir üretim hatası sürmekte olan bir özelliği böldüğünde kontrolü kaybetmek kolaydır. Worktree bu karmaşayı dal başına bir dizin düzeniyle değiştirir.
Yaygın durumlar iki komutla karşılanır. Mevcut bir dalı yeni bir kardeş dizine checkout etmek için:
git worktree add ../my-project-feature feature-branch
Tek adımda yeni bir dal ve onun worktree'sini oluşturmak için:
git worktree add -b new-feature ../my-project-new-feature
Dikkat çekici bir kısıtlama var: Aynı dal aynı anda birden fazla worktree'ye checkout edilemez, dolayısıyla her worktree benzersiz bir dal gerektirir. Yazar bunu gizli bir avantaj olarak sunuyor; çünkü sizi her görevin tek bir dala ve tek bir dizine karşılık geldiği düzenli bir eşleşmeye itiyor ve bu da zihinsel olarak kendinizi kaybetmenizi önlüyor.
Bir hotfix tarafından bölünen bir özellik
Makale gerçekçi bir senaryoyu adım adım anlatıyor. main üzerinde duran tek bir shop diziniyle başlıyorsunuz. git worktree add -b feature/checkout ../shop-checkout komutuyla checkout akışı için bir özellik worktree'si açıyorsunuz. Sonra bir ödeme hatası üretime düşüyor ve özellik işini bozmak yerine git worktree add -b hotfix/payment-fail ../shop-payment-hotfix ile üçüncü bir dizin oluşturuyorsunuz.
Bu noktada üç dizin bir arada yaşıyor: biri main üzerinde, biri özellik için, biri hotfix için. Hatayı hotfix dizininde düzeltip test edebilir, özellik üzerinde başka yerde çalışmaya devam edebilir ve ana dizini merge'ler ile code review'lar için boş bırakabilirsiniz.
İşi geri birleştirmek, makalenin vurguladığı gibi, sıradan bir Git işlemdir. Özellik worktree'sinde commit yapıp ana dizine geçer, main'i checkout eder, özellik dalını merge eder, çatışmaları çözer ve push'larsınız. Öğrenecek yeni bir şey yok — kazanç, her worktree tek bir dala adanmış olduğu için yanlış dala yanlışlıkla commit yapmanın ya da acil bir şey sizi böldüğünde yerinizi kaybetmenin çok daha zor hale gelmesidir.
Listeleme, kaldırma ve temizleme
Rehber ayrıca bakım işlemlerini de kapsıyor. git worktree list komutunu çalıştırmak, Git'in bildiği her worktree'yi, her birinde checkout edilmiş dalıyla birlikte gösterir; bu da başka bir yere bağlı bir dalı yeniden kullanmaya çalışmaktan kaçınmanıza yardımcı olur.
Bitmiş bir worktree'yi kaldırmak için git worktree remove ../my-project-feature kullanın. Worktree'de commit edilmemiş değişiklikler veya untracked dosyalar varsa Git --force geçmedikçe reddeder ve ana worktree'yi asla kaldıramaz. Makalenin üzerinde durduğu bir uyarı: Bir worktree'yi kaldırmak yalnızca çalışma dizinini siler, dalın kendisini silmez ve commit edilmemiş işi kaybetmemek için önce içinde git status çalıştırmalısınız.
Worktree dizinini elle silerseniz, Git eski metadata'yı tutar ve girdi listede eksik olarak görünür. Çözüm git worktree prune'dur; temizliği daha eski girdilerle sınırlamak için --expire 7.days.ago gibi bir süre parametresi, ya da her şeyi hemen temizlemek için --expire now kullanılabilir.
Neden önemli
Bağlam değiştirme, geliştirme işindeki en büyük gizli maliyetlerden biridir ve stash-ve-geç rutini bunu büyütür. Worktree bu maliyete doğrudan saldırır: Her iş akışına kendi dizini gelir, stash'leme nadir bir istisna haline gelir ve acil bir hotfix üzerinde çalıştığınız şeyi rayından çıkarmaz. Yazarın değerlendirmesi ölçülü — basit, sıralı işler için geleneksel dallandırma hâlâ yeterlidir ve worktree yalnızca gerçekten aynı anda iki yerde olmanız gerektiğinde karşılığını verir. Makalenin Hacker News'te gördüğü ilgi, bu durumun yeterince yaygın olduğunu ve birçok geliştiricinin Git'te yaklaşık on yıldır duran bir özelliği yeniden düşünmeye istekli olduğunu gösteriyor.
- #git
- #version-control
- #developer-tools
- #cli
- #workflow