git remote prune - beklediğim kadar budanmış dal göstermedi


113

Man sayfasından:

Deletes all stale tracking branches under <name>.
These stale branches have already been removed from the remote repository
referenced by <name>, but are still locally available in "remotes/<name>".

Bu yüzden kullanarak bir grup dalı kaldırdım

git push origin :staleStuff

ve sonra koştu

git remote prune origin

Ancak, yalnızca tek bir yerel şube budanmıştır. Bu şubelerin bir kısmını benim, bir kısmını da iş arkadaşlarım oluşturdu. Bu, ilk başta o şubeleri doğru takip etmediğimi mi gösteriyor?


7
hangi şubelerin kaldırılacağını öğrenmek için, git remote show originişaretli dalları arayabilir ve arayabilirsinizstale
Birisi Somewhere

Yanıtlar:


189

Kullandığınızda git push origin :staleStuff, otomatik olarak kaldırılır origin/staleStuff, böylece koştuğunuzda git remote prune origin, başkası tarafından kaldırılan bazı dalları budamış olursunuz. İş arkadaşlarınızın artık git prunekaldırdığınız şubelerden kurtulmak için koşması daha olasıdır .


Peki tam olarak ne git remote pruneyapıyor? Ana fikir: yerel şubelere (şubeleri izleme değil) git remote prunekomutla dokunulmaz ve manuel olarak kaldırılmalıdır.

Şimdi, daha iyi anlamak için gerçek dünyadan bir örnek:

2 şubesi olan bir uzak deponuz var: masterve feature. Her iki dalda da çalıştığınızı varsayalım, bu nedenle yerel deponuzda bu referanslara sahip olursunuz (herhangi bir karışıklığı önlemek için tam referans adları verilmiştir):

  • refs/heads/master(kısa ad master)
  • refs/heads/feature(kısa ad feature)
  • refs/remotes/origin/master(kısa ad origin/master)
  • refs/remotes/origin/feature(kısa ad origin/feature)

Şimdi, tipik bir senaryo:

  1. Başka bir geliştirici feature, üzerindeki tüm çalışmaları bitirir , onu içine birleştirir masterve featureuzak depodan dalı kaldırır .
  2. Varsayılan olarak, bunu yaptığınızda git fetch(veya git pull), yerel deponuzdan hiçbir referans kaldırılmaz, dolayısıyla bu 4 referansın tümüne hala sahip olursunuz.
  3. Onları temizlemeye ve koşmaya karar veriyorsun git remote prune origin.
  4. Git olduğunu tespit featureçok dal artık mevcut refs/remotes/origin/featurea, eski çıkarılmalıdır dalı.
  5. Şimdi dahil olmak üzere 3 referansınız var refs/heads/featureçünkü git remote prunehiçbir refs/heads/*referansı kaldırmıyor .

Uzaktan izleme dallarıyla ilişkili yerel şubeleri branch.<branch_name>.mergeyapılandırma parametresi ile belirlemek mümkündür . Bu parametre herhangi bir şeyin çalışması için gerçekten gerekli değildir (muhtemelen dışında git pull), bu yüzden eksik olabilir.

(yorumlardan örnek ve faydalı bilgilerle güncellendi)


Durumu şu şekilde anladım: şubeler hala yerel olarak mevcut ancak uzak depodan kaldırılmış. Şimdi uzaktan kumandada bulunmayan tüm yerel dalları kaldırmak istiyorum, bu nedenle git prune çalıştırıyorum. Bana "Bu eski dallar zaten uzaktaki depodan kaldırıldı" diyor. Yanlış mıyım?
Felixyz

3
Haklısınız, ancak "yerel şubeler" in anlamını yanlış anlamış olabilirsiniz git prune. Sadece içindeki dallar /refs/remotes/<remote_name>/budamaya tabidir; içindeki herhangi bir şubeye /refs/heads/dokunulmayacaktır - bunları manuel olarak yönetmeniz gerekir.
en fazla

Aha, ben de öyle düşünmüştüm. Yani istediğimi yapmanın bir yolu yok: uzak şubelerin silinip silinmediğini kontrol ederek kafalardaki uzak dalları izleyen tüm dalları otomatik olarak silmek mi?
Felixyz

2
Bunun için yerleşik bir komut yoktur, ancak böyle bir komut dosyasını kendiniz yazabilirsiniz. İzleme dalları, branch.<branch_name>.mergeyapılandırma parametresinin varlığı ile tanımlanabilir .
en fazla

Buraya gelen ve @Felixyz ile aynı yanılgıya sahip olan herkesin cevabınıza komik bakıp sonunda anlayabilmek için yorumları okumak zorunda kalmaması için yorumlardaki bilgileri cevabın kendisine eklerseniz bu cevap daha iyi olur. .
Akrikos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.