gitの2.7(Q4 2015)を直接使用してソートブランチをご紹介しますgit branch
:
参照はaa3bc55をコミットし、aedcb7dをコミットし、1511b22をコミットし、f65f139をコミットし、...(2015年9月23日)、aedcb7dコミット、1511b22をコミットし、ca41799コミット(2015年9月24日)を、そしてコミットf65f139、...(2015年9月23日)by Karthik Nayak(KarthikNayak
)。
(合併によりJunio C浜野- gitster
-で7f11b48コミットし、2015年10月15日)を
特に、aedcb7dをコミットします。
branch.c
: ' ref-filter
' APIを使用
参照ソートを反復するために、' branch.c
'を ' ref-filter
' APIに使用します。これにより、 ' branch.c
'で使用されているコードのほとんどが削除され、 ' ref-filter
'ライブラリへの呼び出しに置き換えられます。
それはオプションを追加します--sort=<key>
:
指定されたキーに基づいてソートします。値の降順で並べ替える
接頭辞-
。
この--sort=<key>
オプションは複数回使用できます。その場合、最後のキーが主キーになります。
サポートされるキーは、のキーと同じgit for-each-ref
です。
ソート順は、デフォルトで完全なrefname(refs/...
接頭辞を含む)に基づいてソートされます。これは、デタッチされたHEAD(存在する場合)を最初にリストし、次にローカルブランチ、最後にリモート追跡ブランチをリストします。
ここに:
git branch --sort=-committerdate
または(Git 2.19で以下を参照)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
Karthik Nayak()によるcommit 9e46833(2015年10月30日)も参照してください。
協力者:ジュニオC浜野()。(による合併Junio C浜野- -で415095fコミット 2015年11月、03)KarthikNayak
gitster
gitster
数値ごとに並べ替える場合(など--sort=objectsize
)、両方の参照が同じ値を保持している場合、フォールバック比較は行われません。Johannes Sixt($ gmane / 280117)が指摘したように、これは予期しない結果(つまり、等しい値を持つ参照をリストする順序を事前に決定できない)を引き起こす可能性があります。
したがって、他の基準が等しい場合は常に、refnameに基づくアルファベット順の比較にフォールバックします。
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
Git 2.19では、ソート順をデフォルトで設定できます。
git branch
のbranch.sort
ような構成をサポートしgit tag
ていtag.sort
ます。Samuel Maftoul( ``)によるcommit 560ae1c(2018年8月16日)を
参照してください。(による合併Junio C浜野- -でd89db6fをコミットし、2018年8月27日)
gitster
branch.sort:
この変数は、によって表示されるときのブランチのソート順を制御しますgit-branch
。
" --sort=<value>
"オプションを指定しない場合、この変数の値がデフォルトとして使用されます。
リモートブランチを一覧表示するには、を使用しますgit branch -r --sort=objectsize
。この-r
フラグにより、ローカルブランチではなくリモートブランチがリストされます。
Git 2.27(2020年第2四半期)では、「git branch
」およびその他の「for-each-ref
」バリアントは複数の--sort=<key>
オプションを優先順位の高い順に受け入れましたが、「--ignore-case
」の処理とrefnameとのタイブレークにいくつかの破損がありましたが、修正されました。
Jeff King()によるcommit 7c5045f、commit 76f9e56(2020年5月3日)を参照してください。(による合併Junio C浜野- -で6de1630コミット、2020年5月8日)をpeff
gitster
ref-filter
:すべてのユーザーがソートした後にのみ、フォールバック参照名ソートを適用します
サインオフ:Jeff King
コミット9e468334b4( " ref-filter
:アルファベット順比較のフォールバック"、2015-10-30、Git v2.7.0-rc0- バッチ#10にリストされたマージ)は、refnameの比較にフォールバックするref-filterのソートを教えました。
しかし、それは誤ったレベルで行われ、すべてのソートキーが使い果たされた後ではなく、ユーザーからの単一の「」キーの比較結果を上書きしました。
--sort
これは、単一の " --sort
"オプションでは正しく機能しましたが、複数のオプションでは機能しませんでした。
最初のキーとrefnameとの関連付けを解除し、2番目のキーはまったく評価しません。
問題をさらに面白くするために、このフォールバックを時々のみ適用しました!文字列の比較が必要
な " taggeremail
"のようなフィールドのstrcmp()
場合、0であってもの結果を本当に返します。
しかし、 " value
"のような数値の " "フィールドのtaggerdate
場合は、フォールバックを適用しました。そして、それが私たちのマルチソートテストがこれを逃した理由です:それはtaggeremail
主な比較として使用します。
それでは、より厳密なテストを追加することから始めましょう。2つのタガーメール、日付、および参照名のすべての組み合わせを表す一連のコミットがあります。次に、正しい優先順位で並べ替えが適用されていることを確認できます。文字列と値の両方のコンパレーターがヒットします。
これはバグを示しており、修正は簡単です。compare_refs()
すべてのref_sorting
キーを使い果たした後、フォールバックを外部関数に移動します。
外側の関数には"ignore_case"
個々のref_sorting
要素の一部であるため、フラグがないことに注意してください。一致させるためにユーザーのキーを使用しなかったので、そのようなフォールバックが何をすべきかは議論の余地があります。
しかし、これまで私たちはそのフラグを尊重することを試みてきたので、最も侵襲性の低いことはそうすることを続けることを試みることです。
現在のコードのすべての呼び出し元がすべてのキーにフラグを設定するか、またはフラグを設定しないため、最初のキーからフラグをプルすることができます。ユーザーがキーの大文字と小文字の区別を個別に反転できる仮想世界では、コードを拡張して、そのケースをブランケット " --ignore-case
" と区別することができます。