回答:
git diff
コマンドは、オプションの値をとるために--stat
:
--stat[=<width>[,<name-width>[,<count>]]]
Generate a diffstat. You can override the default output width for
80-column terminal by --stat=<width>. The width of the filename
part can be controlled by giving another width to it separated by a
comma. By giving a third parameter <count>, you can limit the
output to the first <count> lines, followed by ... if there are
more.
These parameters can also be set individually with
--stat-width=<width>, --stat-name-width=<name-width> and
--stat-count=<count>.
(スクリプティングの場合git diff-tree
、「配管」コマンドに近いので、直接使用することもできますが、どちらの方法でも問題ないと思います。--stat
を使用する場合と同じ追加のテキストが必要git diff-tree
です。git diff
「磁器」を使用することの本質的な違い"フロントエンド、およびgit diff-tree
plumbコマンドは、名前の変更の検出を行うかどうかを決定するgit diff
オプションなどの構成済み設定を検索しますdiff.renames
。まあ、それに加えて、フロントエンドgit diff
はgit diff-index
、コミットとインデックスを比較する場合と同等のことを行いますたとえば、言い換えるgit diff
と、設定を読み取り、適切な配管を自動的に呼び出します。)
--stat-graph-width=...
スイッチを使用できることに注意してください。注意も高く設定することを--stat-graph-width=
しては--stat-name-width=
十分ではありません、あなたも設定しなければならない--stat-width=
2をカバーするために十分な大きさを。
diff.statGraphWidth
を設定するために使用できる構成変数があります--stat-graph-width
が、その他はデフォルトで端末の幅になります。(したがって、別の答え:「はい、ターミナルウィンドウを1000列幅にしてください」:
スクリプト処理の場合、次のいずれかを使用することをお勧めします。
# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file
# list the names and change statuses:
git diff --name-status
M path/to/modified/file
R100 path/to/existing/file path/to/renamed/file
# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1 0 path/to/modified/file
0 0 path/to/{existing => renamed}/file
これら-z
はNUL
、フィールドターミネータとして使用するオプションと組み合わせると、堅牢なスクリプト処理にさらに便利になります。
git rev-parse --show-toplevel
。元の問題は、特に長いファイル名やの値が小さい場合のdiffstatsの問題である、切り詰められたパスに関するものでした--stat-name-width
。上記のコマンドはパスを切り詰めませんが、リポジトリルートからの相対パスであるにもかかわらず、要求に応じて「フル」パスを表示します。
Bashユーザーの場合、$COLUMNS
変数を使用して、利用可能な端末の幅を自動的に埋めることができます。
git diff --stat=$COLUMNS
非常に長いパス名でも切り捨てられる可能性があります。この場合、を使用して+++ / ---パーツの幅を減らすことができます。--stat-graph-width
たとえば、これにより端子の幅の1/5に制限されます。
git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))
より一般的な解決策として、の出力を使用しtput cols
て端子の幅を決定できます。
--stat=$COLUMNS,$COLUMNS
か?毎回それを入力するのはおかしいです。
export COLUMNS
あなたに~/.bashrc
、そしてあなたの中~/.gitconfig
の下で[alias]
、追加smart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
diff
。マージやプルなどにも使用できます。(手動で行うこともできません。)GITがサポートしていないと思います。
オプションがあります--name-only
:git diff --name-only
。オプションは、のような他のgitコマンドによってサポートされていますshow
し、stash
。
オプションを使用してもパスは短くなりません。
次のgitエイリアスを作成しました。
diffstat = ! "gitdiffstat() { git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"
tput cols
コマンドから列数を読み取ります。デフォルトではとの差分になりmaster
ますが、オプションで別のブランチを指定できます。
$ git diffstat
.gitalias | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
私が見つけた簡単な解決策はこれを行うことでした:(* nixでのみ機能し、申し訳ありませんosx)
git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"
このバージョンはどちらでも機能しますが、osxでは見栄えがよくありません。
git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"
私はdiff --statの動作がgit 1.7.10の周りのどこかで変更されていることを発見しました。以前はデフォルトでファイルパスが固定幅に短縮されていました。ターミナルウィンドウで可能な限り表示されるようになりました。この問題が発生している場合は、必ず1.8.0以降にアップグレードしてください。