2012-04-09 10 views
21

どのようにしてリモート起点ブランチのすべての名前を取得できますか?特定のリモートのブランチ名のリスト

私は--remote --listオプションから開始しましたが、冗長origin/HEAD -> origin/masterメッセージと別の起点からの分岐を得ました。特定の起源の

$> 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 

支店は<pattern>オプションと一致することができますが、冗長なメッセージはまだそこにあります。実際にそのパターンは実際には正しくありません。なぜなら、ある起源の名前は、別の起点名の一部、あるいはいくつかの支店の部分文字列である可能性があるからです。私が探しています何

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

origin1の支店名のリストである、それらのいずれかは、私がgit checkoutコマンドのために使用することができます。そのような何か:

develop 
feature/1 
feature/2 
feature/3 
master 

それはそれがために彼らのunsafenessとバリエーションの、唯一の真のgitパワーで、grepsedtailあるいはghc -eラッパーなしで行われるべきであることが重要です。

答えて

30

それはそれがために彼らのunsafenessとバリエーションの、唯一の真のgit電力で、grepsedtailあるいはghc -eラッパーなしで行われるべきであることが重要です。 Gitの磁器のコマンドのための唯一の真実である

(「What does the term porcelain mean in Git?」を参照)

配管コマンドls-remoteを使用して、あなたはその出力をフィルタリングすることができるようになります。

LS-リモートパラメータなしではまだ、リモートHEADリストになります。

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

をしかし、あなたは、リモート言ったの頭だけに頼めば:

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

最終的な答え:

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

(はい、sedを使用していますが、配管コマンドの出力は安定しているはずです曖昧に解釈する必要があります)

+0

網羅的な答えをありがとう。 –

+3

私もこれに答えることができましたが、 "sed"ルールはどうなったのですか? lol、whatever – KurzedMetal

+3

@KurzedMetal trueですが、 'git branch'のような磁器コマンドではなく、配管コマンドだけを使って' sed'の使用を慎重に正当化しました。たとえば、http://stackoverflow.com/questions/2978947/how-to-list-all-the-log-for-current-project-in-git/2979124#2979124またはhttp://stackoverflow.com/questionsを参照してください。/2976665/git-changelog-day-day/2976776#2976776 – VonC

2

既存の回答はどちらも明示的に質問(sed)で望ましくないものを使用しており、リモートコマンドです。どちらか本当に最適ではない、誰かがそれを改善する方法を知っている場合は、それを維持する:

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

が更新

私はこれらの問題の両方を回避するこれを見つけたが、唯一のローカルのgitコマンドとパイプを使用しています。ローカルブランチがない場合は/remote/originの接頭辞を含むフルリモートがリストされますが、もしあればローカル名のみがリストされます。さらに、同じSHA1を指す数がいくつかある場合は、いくつかの参照をスキップするように見えます。

3

別の方法は、同じ問題にいくつかの研究の後、次のとおりです。

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

これは、フェッチされた最後の時点で、リモートの名前については、お近くのレフリーのソートされたリストを提供します。

これはタグなどで調整できます。

関連する問題