git log
には、出力のフォーマット方法を指定するためのNice --format
オプションがあります。
しかし、blame
のデフォルトの出力は人間にやさしいものではありませんが、git blame
には同等のものがないようです。もっと見たいです。
たとえば、次の代わりに:
5600cab7 js/sidebar/VehicleGrid.js (Rene Saarsoo 2009-10-08 18:55:24 +0000 127) if (x > y) {
b5f1040c js/map/monitoring/VehicleGrid.js (Mihkel Muhkel 2010-05-31 07:20:13 +0000 128) return x;
私はを頂きたい:
5600cab7 Rene Saarsoo (1 year ago) 127: if (x > y) {
b5f1040c Mihkel Muhkel (5 months ago) 128: return x;
git blame --porcelain
の出力を解析するスクリプトを作成できると思いますが、blame
の恐ろしいデフォルト出力を考えると、誰かがすでに何かをしたに違いないと感じています。
何か案は?または、そのようなスクリプトを実装するためのヒントはありますか?
編集:小さなスクリプト と記述して解決しました。
Git 2.18を更新(2018年第2四半期):「git blame
」は、元のコミットからの興味のないメタデータを前のものと同じ行で強調表示解除し、コミットの経過時間に応じて異なる色で行をペイントすることも学習します。
commit 0dc95a4 、 commit 25d5f52 、 commit cdc2d5f (2018年4月24日)を参照 Stefan Beller(stefanbeller
) によって。
( Junio C Hamanoによってマージ-gitster
- in commit 3d24129 、2018年5月30日)
builtin/blame
:新しい配色スキーム設定を追加非難のデフォルトの配色を選択できる構成オプションを追加します。コマンドラインは、依然として構成よりも優先されます。
git config
がレポートするようになりました:
blame.coloring::
これは、blame出力に適用される配色を決定します。
デフォルトの「repeatedLines
」、「highlightRecent
」、または「none
」を使用できます。
builtin/blame:最近変更された行を強調表示
日付に別の色を選択し、年齢に応じて「温度のクールダウン」を模倣します。
以前のパッチと同様に、これはこのモードを有効にするコマンドラインオプション '
--color-by-age
'と色を選択する構成オプション 'color.blame.highlightrecent
'を提供します。
ドキュメント に以下が追加されました:
color.blame.highlightRecent
これは、ラインの年齢に応じて非難ラインのメタデータに色を付けるために使用できます。
この設定は、色と日付設定のカンマ区切りのリストに設定する必要があります。色で開始および終了し、日付は最も古いものから新しいものへと設定する必要があります。
タイムスタンプの前にラインが導入された場合、メタデータは色で色付けされ、古いタイムスタンプの色が上書きされます。
絶対タイムスタンプの代わりに、相対タイムスタンプも機能します。 2.weeks.agoは、2週間より古いものに対処するために有効です。
デフォルトは '
blue,12 month ago,white,1 month ago,red
'で、1年より古いものはすべて青で表示され、1か月から1年前の最近の変更は白で保持され、先月内に導入された線は赤で表示されます。
builtin/blame
:興味のないメタデータ行を暗くする
git-blame
を使用すると、多くの行に冗長な情報が含まれます。たとえば、複数の行で構成されるハンクでは、メタデータ(コミット名、作成者、日付)が繰り返されます。
読者はそれらに興味がない可能性があるため、前の行から繰り返される情報に異なる色を付けるオプションを提供します。
伝統的に、CYANは他よりも面白くない行(ハンクヘッダーなど)に使用するので、それに合わせてください。コマンドラインオプション '
--color-lines
'は繰り返されるラインのカラーリングをトリガーし、設定オプション 'color.blame.colorLines
'は色を選択するために提供されています。
構成オプションを設定しても、繰り返される行に色が付いているとは限りません。
元の回答2010
TracやRedmineのようなWebインターフェースがgit blame
の結果を統合することを考えると、そのような解析はすでに行われていると思います。
この Redmine Defect 3832 の例は、このRubyスクリプトの例です。
私にとって、必要なのはSHA1 IDだけなので、-sフラグが機能します。その後、詳細を確認するためにコミットを調べます。スクリプトは明らかにやり過ぎのようです。 -sフラグが1年前に利用できなかった可能性はありますか?
git log
は出力用にさらに多くのカスタマイズオプションを提供するため、git blame
、awk
、xargs
およびgit log
を組み合わせて目的の結果を得ることができます。例えば。
git --no-pager blame <filepath> -L1,+1 --porcelain | awk 'NR==1 {print $1}' | xargs git --no-pager log -1 --pretty=format:"%h - (%cd) %s - %an" --date=relative
これは次のようなものを出力します:
f8a66e80c - (5 months ago) Add gem: devise - elquimista
基本的に上記のgit blame
とawk
は完全なコミットSHAを取得することであり、xargs
はそれをgit log
に引数として渡します。