[解決済み] Git: 2つのコミット間のファイルサイズ差分を表示する?
2023-07-18 16:59:21
質問
2 つのコミット間のファイルサイズの差を表示することはできますか? 以下のようなものです。
$ git file-size-diff 7f3219 bad418 # I wish this worked :)
-1234 bytes
試してみました。
$ git diff --patch-with-stat
そして、それぞれのファイルサイズの違いを示しています。 バイナリ の各ファイルのファイル サイズの違いを表示します。
何かアイデアはありますか?
どのように解決するのですか?
git cat-file -s
は、gitにあるオブジェクトのサイズをバイト単位で出力します。
git diff-tree
は、あるツリーと別のツリーの違いを教えてくれます。
というスクリプトにまとめると
git-file-size-diff
というスクリプトを作成し、PATH のどこかに配置することで
git file-size-diff <tree-ish> <tree-ish>
. 次のようなことを試してみましょう。
#!/bin/bash
USAGE='[--cached] [<rev-list-options>...]
Show file size changes between two commits or the index and a commit.'
. "$(git --exec-path)/git-sh-setup"
args=$(git rev-parse --sq "$@")
[ -n "$args" ] || usage
cmd="diff-tree -r"
[[ $args =~ "--cached" ]] && cmd="diff-index"
eval "git $cmd $args" | {
total=0
while read A B C D M P
do
case $M in
M) bytes=$(( $(git cat-file -s $D) - $(git cat-file -s $C) )) ;;
A) bytes=$(git cat-file -s $D) ;;
D) bytes=-$(git cat-file -s $C) ;;
*)
echo >&2 warning: unhandled mode $M in \"$A $B $C $D $M $P\"
continue
;;
esac
total=$(( $total + $bytes ))
printf '%d\t%s\n' $bytes "$P"
done
echo total $total
}
使用時には次のようになります。
$ git file-size-diff HEAD~850..HEAD~845
-234 Documentation/RelNotes/1.7.7.txt
112 Documentation/git.txt
-4 GIT-VERSION-GEN
43 builtin/grep.c
42 diff-lib.c
594 git-rebase--interactive.sh
381 t/t3404-rebase-interactive.sh
114 t/test-lib.sh
743 tree-walk.c
28 tree-walk.h
67 unpack-trees.c
28 unpack-trees.h
total 1914
を使うことで
git-rev-parse
を使うことで、コミット範囲を指定するすべての通常の方法を受け入れることができるはずです。
EDIT: 累計を記録するように更新しました。bash はサブシェルで while read を実行するので、サブシェルが終了したときに合計が失われないように中括弧を追加していることに注意してください。
EDIT: 別のツリーに対するインデックスを比較するためのサポートを追加しました。
--cached
を呼び出すための引数
git diff-index
の代わりに
git diff-tree
のようになります。
$ git file-size-diff --cached master
-570 Makefile
-134 git-gui.sh
-1 lib/browser.tcl
931 lib/commit.tcl
18 lib/index.tcl
total 244
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Gitを使って最後のXコミットをまとめる
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] 2つのコミット間で変更されたファイル名のみをリストアップする方法
-
[解決済み] 2つのリビジョン間でどのファイルが変更されたかを表示する
-
[解決済み] 同じブランチの異なる2つのコミット間で同じファイルを差分するにはどうしたらいいですか?
-
git push issues
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
git pushで "Updates were rejected because your current branch is behind "というエラーが報告される。
-
git を使用してリモートリポジトリを更新する場合、現在のブランチの先端がエラーの背後にあるため、更新が拒否されました。
-
git reset --hardとgit reset --softの違いについて
-
なぜこのマージが必要なのかを説明するコミットメッセージを git に入力してください。
-
git のコンパイルとインストールの問題を解決する fatal: https のリモートヘルパーが見つからない
-
[解決済み] JenkinsのGitプラグイン。特定のタグをビルドするには?
-
[解決済み] なぜGitでコミットする前にステージが必要なのですか?
-
[解決済み] .gitignoreで特定のファイルを除外する
-
[解決済み] CVS から Git への移行: $Id$ 相当?
-
[解決済み] Git の 'master' ブランチを 'release' にリネームするには?