シェルスクリプトでGitブランチをソートするのはやめよう — Gitはすでにできる
シンプルなgit configコマンドで、最終コミット日によるブランチのソートに何年も費やしてきたシェルスクリプトが不要になる。
多くのgitブランチを扱っているなら、最新のコミット順にブランチを一覧表示するスクリプトを書いたことがあるだろう。このTILの著者はそれを書き、何年も毎日実行していた。そのスクリプトはgit branchをループし、各ブランチ名を抽出し、git logを実行してコミット日を取得し、出力をソートする。動作はするが、遅くて壊れやすい。
現代のgitには組み込みの解決策がある:git branch --sort committerdateだ。また、git config branch.sort committerdateでグローバルに設定すれば、すべてのgit branch呼び出しがデフォルトで最終コミット日でソートされる。
これは単なる便利さの問題ではない — gitの配管が私たちのほとんどが使うよりもはるかに豊かであることを思い出させるものだ。--sortオプションはgit-for-each-refの任意のキーを受け付け、authordate、creatordate、contents:size、さらにはupstreamやpushのrefsのようなフィールドを公開する。これにより、スクリプトなしでメッセージサイズ、上流との関係、作成日でブランチをソートできる。
トレードオフ:committerdateはブランチ上の最後のコミットでソートするのであって、ブランチが最後に触られた時間(例えばマージやリベース)ではない。後者が必要なら、creatordateかカスタムスクリプトが必要だ。しかし、ほとんどのワークフローでは、committerdateがまさに欲しいものだ。
これは小さなヒントだが、毎日時間を節約してくれる種類のものだ。そして、git-for-each-refのmanページを読む良いきっかけにもなる — そこには思っている以上に多くのことがある。
現代のgitなら完全に不要だとわかった。git branchを最終コミット日でソートするように設定するだけだ。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。