2010-10-28 13 views
107

beklendiği kadar budanmış dalları göstermedi Daha sonra, sadece bir tane çalıştırıldı. tek yerel şube budanmıştı. Bu şubelerin bazıları benim tarafımdan bazıları tarafından oluşturuldu. Bu, bu dalları ilk etapta doğru şekilde izlemediğimi gösteriyor mu?git uzak kuru erik ben adam sayfasından

+6

dışarı dalları sen 'do git uzaktan gösteri origin' ve herhangi dalları işaretli arayabilirsiniz kaldırıldı olacak şeyi bulmak için (yorumlardan örnek & yararlı bilgileri alarak güncel)' –

cevap

180

git push origin :staleStuff'u kullandığınızda, origin/staleStuff'u otomatik olarak kaldırır, böylece git remote prune origin'u çalıştırdığınızda, başka bir kişi tarafından kaldırılmış bazı dalları budanmışsınız. İş arkadaşlarınızın artık kaldırdığınız şubelerden kurtulmak için git prune'u çalıştırması daha olasıdır.


git remote prune tam olarak ne yapar? Ana fikir: yerel şubeler (şubeleri takip etmiyor) git remote prune komutuyla temas edilmiyor ve manuel olarak kaldırılmalıdır. Şimdi

, daha iyi anlaşılması için, gerçek dünyadaki bir örnek: master ve feature:

Sen 2 şubesi bulunan bir uzak depo var.

  • refs/heads/master (kısa adı master)
  • refs/heads/feature: en sonucunda yerel depoda bu referanslara sahip bu yüzden (tam referans isimleri herhangi bir karışıklığı önlemek için verilmiştir), her iki dalları üzerinde çalışıyoruz olduğunu varsayalım (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. Bazı diğer geliştirici master içine birleştirir, feature üzerine tüm çalışmaları bitirir ve uzak deposundan feature şube kaldırır.
  2. Varsayılan olarak, git fetch (veya git pull) yaptığınızda, yerel deponuzdan herhangi bir referans kaldırılmaz, bu nedenle bu 4 referansa sahip olursunuz.
  3. Onları temizlemeye karar verdiniz ve git remote prune origin'u çalıştırın.
  4. git feature dalının artık mevcut olmadığını algılar, bu nedenle refs/remotes/origin/featureeski dalının çıkarılması gereken bir daldır.
  5. refs/heads/feature dahil olmak üzere 3 referansınız var, çünkü git remote prune hiçbir refs/heads/* referanslarını kaldırmaz.

Uzak izleme dalları ile ilişkili yerel şubeleri branch.<branch_name>.merge yapılandırma parametresi ile tanımlamak mümkündür. Bu parametrenin çalışması için gerçekten gerekli değildir (muhtemelen git pull hariç), bu nedenle eksik olabilir.

+0

stale' anladım Durum şu: şubeler hala yerel olarak mevcut ama uzak repodan kaldırıldı. Şimdi uzaktan kumandada bulunmayan tüm yerel şubeleri kaldırmak istiyorum, bu yüzden git prune'ı çalıştırıyorum. Bana göre "Bu eski dallar uzak depodan çıkarılmıştı" diyor. Yanlış mıyım? – Felixyz

+3

Haklısınız, ancak "git prune" durumunda "yerel şubelerin" anlamını yanlış anlamış olabilirsiniz. Sadece şubeler/refs/remotes//'budamaya tabidir;/refs/heads/'içindeki herhangi bir şubeye dokunulmaz - bunları manuel olarak yönetmeniz gerekir. – max

+0

Aha, gerçekten düşündüğüm buydu. Yani istediğimi yapmanın bir yolu yok: Uzaktaki şubeleri takip eden kafalardaki tüm dalları otomatik olarak sil, bu uzak şubelerin silinip silinmediğini kontrol ederek? – Felixyz

İlgili konular