web-dev-qa-db-ja.com

Gitログの表形式

最後のコミットをいくつか表示するための単純なエイリアスがあります。

log --pretty=format:'%h %an %s' -10

次のように、結果を列に表示するにはどうすればよいですか。

898e8789 Author1             Commit message here
803e8759 Other Author name   Commit message here
40
takeshin

Git 1.8.3以降では、これが pretty format でネイティブにサポートされており、%<(N)構文を使用して次のプレースホルダーをとしてフォーマットします。 )[〜#〜] n [〜#〜]列幅:

$ git log --pretty=format:'%h %<(20)%an %s' -10

1.8.3より前のバージョンでは、以下に保持されているこの回答の以前のバージョンが機能するはずです。

これは、readを使用してログ行を解析し、printfを使用してログ行を出力し、作成者名の固定幅フィールドを使用して列が整列したままになるBashのソリューションです。 |作者の名前に表示されることはありません。問題があると思われる場合は、別の区切り文字を選択できます。

git log --pretty=format:'%h|%an|%s' -10 | 
  while IFS='|' read hash author message
  do 
    printf '%s %-20s %s\n' "$hash" "$author" "$message"
  done

これは、次を使用してエイリアスとして作成できます。

[alias]
    mylog = "!git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message; do printf '%s %-20s %s\n' \"$hash\" \"$author\" \"$message\"; done"

awkを使用すると、より少ない文字数でこれを実行できると確信していますが、 ことわざ のように、

問題に直面するたびに、「AWKを使用しましょう」と言う人もいます。今、彼らは2つの問題を抱えています。

もちろん、そうは言っても、少し短いawkでそれを行う方法を理解する必要がありました。

git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }'
56
Brian Campbell

次のこともできます。

git log --pretty=format:'%h %<(20)%an %s' -10

シェルマジックやawkcolumnなどによる後処理は必要ありません。

36
Jesse

次のコマンドは、ログを表形式で印刷します

git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|'

column コマンドは、「|」を使用して出力を「列化」しますフィールドセパレータとして、入力が与えられた場合に最適な列幅を見つけるので、フィールドがもっとある場合でもうまく機能します。

Linuxでは、色を使用しない限り問題なく動作します。Linuxの実装は ANSIエスケープコード をうまく処理しません。

ただし、Mac OS Xでは、色を処理し、フィールド区切り文字として任意のUnicode文字を使用できます。コミットテキストで偶然に発生しないと確信しているので、∑を使用します。 |は、コミットの説明に表示される可能性があるため、不適切な選択です。また、--graph --decorate --allを使用すると、グラフの描画に使用される記号の一部として表示されます。

17
ecerulm

真に表形式にするためには、たとえば、より長いユーザー名も切り捨てる必要があります。 20文字:

git log --pretty=format:'%h %<(20,trunc)%an %s' -10

さらに、端末に出力する場合は、コミットメッセージフィールドを切り捨てることにより、行のオーバーフローを防止することができます。

git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10

または、行を折り返し、オーバーフローした行をインデントして整列します。

git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10

編集:上記の例では、端末の幅を79文字にハードコーディングしています。 POSIXシステムでは、tput colsを使用して幅を返すことができます。

git log --pretty=format:'%w(`tput cols`, 0, 29)%h %<(20,trunc)%an %s' -10

または

git log --pretty=format:'%w($((`tput cols`-1)), 0, 29)%h %<(20,trunc)%an %s' -10

残念ながら、これらの最後の2つはgit aliasを中断するため、ターミナルエイリアスが必要になります(入力が本当に好きでない限り)。

10
insysion

表形式の問題は、スペースが不足する可能性があるという事実です...

次の1つは、表示する重要なものの間の私の個人的な最善の妥協点です。

  • wHO
  • 何をした
  • そしていつ
  • howのコミットハッシュでさらに掘り下げることができるように

そう:

  git log --pretty --format='%h %aI %<(15)%an ::: %s'

または

 git log --pretty --format='%h %cI %<(15)%an ::: %s'

作成者の時間ではなくコミット者の時間を取得したい場合

0
Yordan Georgiev

タブを追加する方法は?

あなたが探しているのは:

_%x09_

これが例です

git log --pretty=format:"%C(Magenta)%h %C(cyan)%C(bold)%ad%Creset %C(cyan)%cr%Creset%x09 | %s %C(green)%Creset" --date=short

相対的な日付をタブで表示したかったのですが、固定長ではありませんでした。このようにして、すべての列が整列します(1年未満の場合)。ずっと並べたかったのですが、(皮肉なことに)時間切れになる前のことです。

お役に立てれば!

相対的な年のケース(年をgrepするだけでなく)についてこの回答を改善するための提案がある場合は、それを聞いて喜んでください。方法を知っている場合は、この回答を編集して追加してください。

0
jasonleonhard