59

git log--format出力をどのようにフォーマットするかを指定するための優れたオプションがあります。

しかしgit blame、同等のものはないようですが、のデフォルトの出力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と、誰かがすでにそれについて何かをしているに違いないと感じています。

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

4

7 に答える 7

20

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

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

于 2010-10-18T14:27:10.180 に答える
13

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

commit 0dc95a4commit 25d5f52commit cdc2d5f (2018 年 4 月 24 日) by Stefan Beller ( stefanbeller)を参照してください。
( 2018 年 5 月 30 日、コミット 3d24129Junio C Hamanoによってマージされました)gitster

builtin/blame: 新しい配色設定を追加

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' は色を選択するために提供されます。
config オプションを設定しても、繰り返される行が色付けされるわけではありません。


注: " " ( man )--color-linesの " " および " --color-by-age" オプションが欠落しており、現在 Git 2.34 (Q4 2021) で文書化されています。git blame

コミット 8c32856 (2021 年 10 月 8 日) と、 Bagas Sanjaya ( )によるコミット 38c356a (2021 年 10 月 1 日)を参照してください。( 2021 年 10 月 18 日コミット 871e42eJunio C Hamanoによってマージされました)bagasme
gitster

blame: ドキュメント --color-* オプション

共著: Dr. Matthias St. Pierre
署名者: Dr. Matthias St. Pierre
署名者: Bagas Sanjaya

cdc2d5f (" : 興味のないメタデータ行を暗くするbuiltin/blame"、2018-04-23、Git v2.18.0-rc0 --バッチ #7にリストされているマージ) および25d5f52 (" : 最近変更された行を強調表示する"、2018-04-23、Git をコミットします。 v2.18.0-rc0 --バッチ #7にリストされているマージ) と( man )へのオプションをそれぞれ導入します。 どちらのオプションも使用方法のヘルプに記載されていますが、 には記載されていません。 それらを文書化します。builtin/blame--color-lines--color-by-agegit blame
git-blame(1)

git blamemanページに含まれるようになりました:

[--color-lines] [--color-by-age] [--progress] [--abbrev=] [ | --目次 | - 逆行する ..] [ - ]

blame-optionsmanページに含まれるようになりました:

--color-lines

前の行と同じコミットからのものである場合、デフォルト形式の行注釈に異なる色を付けます。これにより、異なるコミットによって導入されたコード ブロックを区別しやすくなります。色のデフォルトはシアンで、color.blame.repeatedLinesconfig オプションを使用して調整できます。

--color-by-age

デフォルトの形式では、線の経過時間に応じて線の注釈に色を付けます。構成オプションは、color.blame.highlightRecent年齢の各範囲で使用される色を制御します。

git configmanページに含まれるようになりました:

この設定は、色と日付の設定のカンマ区切りのリストに設定する必要があります。日付は、古いものから新しいものへと設定する必要があります。行が指定されたタイムスタンプの前に導入された場合、メタデータは指定された色で色付けされ、古いタイムスタンプ付きの色が上書きされます。

git configmanページに含まれるようになりました:

デフォルトはblue,12 month ago,white,1 month ago,redで、1 年以上経過したものはすべて青色で表示され、1 か月から 1 年前までの最近の変更は白色で表示され、先月に導入された行は赤色で表示されます。

git configmanページに含まれるようになりました:

git blame --color-lines前の行と同じコミットからのものである場合、指定された色を使用して の行注釈を色付けします 。デフォルトはシアンです。


元の回答 2010

Trac や Redmine などの Web インターフェイスがgit blame結果を統合することを考えると、そのような解析は既に行われていると思います。

このRedmine Defect 3832で、この ruby​​ スクリプトを使用した例を確認できます。

于 2010-10-18T13:03:17.733 に答える
7

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

于 2012-01-12T00:46:40.663 に答える
1

git logより多くの出力のカスタマイズ オプションが提供されるため、 、 、および を組み合わせて、git blame必要awkxargsもの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

于 2018-10-31T02:09:56.633 に答える