2012-04-09 19 views
21

Bazı uzak menşe dallarının tüm isimlerini nasıl elde etmek mümkün olabilir?Belirli bir uzak alanın şube adlarının listesi

--remote --list seçeneklerinden başladım, ancak yedekli origin/HEAD -> origin/master iletisini ve başka bir kaynaktan gelen dalları aldım. Belirli kökenli

$> git branch --remote --list 
    origin/HEAD -> origin/master 
    origin1/develop 
    origin1/feature/1 
    origin1/feature/2 
    origin1/feature/3 
    origin1/master 
    origin2/develop 
    origin2/feature/1 
    origin2/feature/2 
    origin2/master 

Dallar <pattern> seçeneği ile uyumlu olabilir, ama gereksiz mesaj hala orada. Aslında bu desen gerçekten doğru değildir, çünkü bazı kökenlerin adı başka bir kökenden, hatta bazı dallardan bir alt tabaka olabilir. Ben Aradıklarım

$> git branch --remote --list origin1* 
    origin1/HEAD -> origin/master 
    origin1/develop 
    origin1/feature/1 
    origin1/feature/2 
    origin1/feature/3 
    origin1/master 

origin1 dalı adlarının bir listesi, bunlardan herhangi ben git checkout komut için kullanabilirsiniz. Bunun gibi bir şey:

develop 
feature/1 
feature/2 
feature/3 
master 

O dolayı unsafeness ve varyasyon, tek gerçek git güçle, grep, sed, tail hatta ghc -e mahfazalar olmadan yapılması gerektiğini önemlidir.

cevap

30

O dolayı unsafeness ve varyasyon, tek gerçek git gücüyle, grep, sed, tail hatta ghc -e mahfazalar olmadan yapılması gerektiğini önemlidir. git porselen komutlar için sadece doğrudur

(bkz "What does the term porcelain mean in Git?")

Kullanım tesisat komutu ls-remote ve sonra onun çıkışını filtre mümkün olacak. parametre olmadan

ls-uzak hala uzak HEAD listelemek istiyorum:

[email protected]:~/ce/ce6/.git$ git ls-remote origin 
8598d26b4a4bbe416f46087815734d49ba428523 HEAD 
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master 
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap 

Ama başkanları için sadece sorarsanız söyledi uzaktan:

[email protected]:~/ce/ce6/.git$ git ls-remote --heads origin 
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master 
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap 

Final cevap:

[email protected]:~/ce/ce6/.git$ git ls-remote --heads origin | sed 's?.*refs/heads/??' 
master 
test_trap 

(Evet, sed kullanıyor, ancak bir sıhhi tesisat komutunun çıkışı eno kararlı olması gerekiyordu. ayrıştırmak için ugh)

+0

Harika görünüyor. Kapsamlı cevap için teşekkürler. –

+3

Buna da cevap verebilirdim, ama "sedef yok" kuralıyla ne olur? lol, ne olursa olsun – KurzedMetal

+3

@KurzedMetal, ama 'sed şube kullanımı yerine, sadece tesisat komutunu kullanarak 'sed' kullanımını dikkatli bir şekilde haklıyorum. Örneğin bkz. Http://stackoverflow.com/questions/2978947/how-to-list-all-the-log-for-current-project-in-git/2979124#2979124 veya http://stackoverflow.com/questions/2976665/git-changelog-gün-gün/2976776 # 2976776 – VonC

2

Varolan cevabın her ikisi de (sed) sorusu içinde istemediği bir şeyi kullanır ve uzak bir komuttur. Ya gerçekten optimum değil, ama tutarak birisi onu geliştirmek için nasıl biliyorsa:

git rev-parse --remotes=origin | git name-rev --name-only --stdin 

Güncelleme:

Ben bu sorunları hem önler olduğunu buldum, sadece yerel git komutları ve bir boru kullanır. Yerel şubeniz yoksa /remotes/origin ön ekini de içeren tam uzaklığı listeler, ancak yalnızca yerel adınız varsa. Buna ek olarak, aynı SHA1'e birden fazla işaret varsa, bazı refs atlamak gibi görünüyor.

3

alternatif bir metot, aynı sorun haline biraz araştırma sonra, geçerli:

git for-each-ref --format='%(refname:strip=2)' refs/remotes/<remote_name> 

Bu

son getirilen noktada uzaktan adlandırılmış için yerel hakemlerimizle sıralı bir liste verecektir.

Etiketleri vb. Için bunu ayarlayabilirsiniz.

İlgili konular