web-dev-qa-db-ja.com

git blameの出力をカスタマイズする方法はありますか?

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の恐ろしいデフォルト出力を考えると、誰かがすでに何かをしたに違いないと感じています。

何か案は?または、そのようなスクリプトを実装するためのヒントはありますか?

編集:小さなスクリプト と記述して解決しました。

47
Rene Saarsoo

別の出力形式を使用できます:git annotateまたはgit blame -c

--date=<format>オプション(またはblame.date構成変数)を使用して日付のフォーマットを変更できます。ここで、<format>relative、local、default、iso、 rfc、short。詳細は git-blame および git-log のマンページを参照してください。

18
Jakub Narębski

Git 2.18を更新(2018年第2四半期):「git blame」は、元のコミットからの興味のないメタデータを前のものと同じ行で強調表示解除し、コミットの経過時間に応じて異なる色で行をペイントすることも学習します。

commit 0dc95a4commit 25d5f52commit 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スクリプトの例です。

7
VonC

私にとって、必要なのはSHA1 IDだけなので、-sフラグが機能します。その後、詳細を確認するためにコミットを調べます。スクリプトは明らかにやり過ぎのようです。 -sフラグが1年前に利用できなかった可能性はありますか?

7
Gdalya

git logは出力用にさらに多くのカスタマイズオプションを提供するため、git blameawkxargsおよび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 blameawkは完全なコミットSHAを取得することであり、xargsはそれをgit logに引数として渡します。

0
elquimista