41

いくつかのリモートオリジンブランチのすべての名前を取得するにはどうすればよいですか?

オプションから始めましたが、別のオリジンから--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

grepsedtailさらにはghc -eラッパーを使用せずに、真の力のみを使用して実行することが重要ですgit。これは、安全性が低く、バリエーションがあるためです。

4

3 に答える 3

47

grepsedtailさらにはghc -eラッパーを使用せずに、真の git パワーのみを使用して実行することが重要です。これは、安全性が低く、バリエーションがあるためです。

これは git porcelain コマンドにのみ当てはまります (「Git での磁器という用語の意味は?」を参照) 。

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

パラメータなしの ls-remote は、引き続きリモート HEAD をリストします。

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote origin
8598d26b4a4bbe416f46087815734d49ba428523    HEAD
8598d26b4a4bbe416f46087815734d49ba428523    refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012    refs/heads/test_trap

ただし、上記のリモートのヘッドのみを要求する場合:

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin
8598d26b4a4bbe416f46087815734d49ba428523    refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012    refs/heads/test_trap

最終的な答え:

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin  | sed 's?.*refs/heads/??'
master
test_trap

(はい、それは を使用sedしますが、配管コマンドの出力は解析できるほど安定しているはずです)


例を文書化した Git 2.23 (Q3 2019)も参照してください。

git branch -r -l '<remote>/<pattern>'
git for-each-ref 'refs/remotes/<remote>/<pattern>'
于 2012-04-09T16:43:53.407 に答える
3

既存の回答は、質問で明示的に不要なもの(sed)を使用しており、リモートコマンドです。

これらの問題の両方を回避し、ローカルの git コマンドとパイプのみを使用することがわかりました。

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

更新:どちらも最適ではありませんが、誰かがそれを改善する方法を知っている場合はそのままにしておきます。ローカル ブランチがない場合は/remotes/originプレフィックスを含む完全なリモートがリストされますが、ローカル ブランチがある場合はローカル名のみがリストされます。さらに、同じ SHA1 を指している複数の参照がある場合、一部の参照をスキップするようです。

于 2016-07-21T12:37:42.830 に答える