web-dev-qa-db-ja.com

Gitログにコミットサイズを表示する

git logの出力に表示されるコミットサイズを取得するにはどうすればよいですか?

commit sizeをその親とそれ自体の差分として理解するか、またはどのくらいの大きさコミットであるかを示す妥当なものを理解できます。

git logには--log-sizeオプションがありますが、コミット自体ではなくログメッセージのサイズです。

14
Cyker

コミットの「サイズ」は、さまざまな意味を持ちます。どれだけのディスクストレージを占有するかを意味する場合、Gitで伝えるのは非常に難しく、おそらく非生産的です。 SVNのようなものはコミットをデルタとして保存しますが、Gitでファイルを変更すると、ファイルの新しいコピーがオブジェクトとしてグラフデータベースに保存されます。 1つのオブジェクトを多くのコミットで共有できます。これは非効率に思えるかもしれませんが、Gitにはディスクスペースを驚くほど効率的に使用する多くの賢い方法があります。

何行変更したかを意味するなら、それは簡単です。さまざまなフラグを使用して、変更されたファイルと行の数を取得できます。それらのほとんどには、Wordの「stat」が含まれています。たとえば、_git log --shortstat_は、変更されたファイルの数と、挿入および削除された行の数を示します。以下に例を示します。

_commit e3d1909c875ea0c1a64246d735affa039ad11aa0 (Origin/master, Origin/HEAD)
Author: Michael G. Schwern <[email protected]>
Date:   Thu Aug 11 13:04:24 2016 -0700

    Add default Travis and AppVeyor configs.

    The AppVeyor one is set up for Dist::Zilla, the hardest of the bunch.

 2 files changed, 60 insertions(+)
_

コミットが表すディスクストレージのアイデアが必要な場合は、コミットが作成した新しいファイル(ブロブオブジェクト)のIDを取得し、そのサイズを確認する必要があります。それらは_git log -p_で見ることができます。

_commit 0f28d9a96bc92d802b57900ce4a06db71cbaef6d
Author: Michael G. Schwern <[email protected]>
Date:   Wed Aug 10 09:13:40 2016 -0700

    Remove my name from the gitconfig.

    Now it can be used by anyone. Git will Prompt for the user info.

diff --git a/.gitconfig b/.gitconfig
index 1d539bd..538440f 100644
--- a/.gitconfig
+++ b/.gitconfig
@@ -1,18 +1,10 @@
-# If you use this file, remember to change the [user] and [sendemail] sections.
-
...and so on...
_

_index 1d539bd..538440f 100644_は、この置き換えられたblobオブジェクト(ファイル)1d539bdが538440fであり、パーミッション0644を使用することを示します。_git cat-file -s 538440f_を実行すると、オブジェクトが4356バイトであることがわかります。それは非圧縮サイズです。ディスク上では、わずか1849バイトです。

_$ ls -l .git/objects/53/8440f84014584432fa5bf09d761926b3d70dbe 
-r--r--r-- 1 schwern staff 1849 Aug 10 09:14 .git/objects/53/8440f84014584432fa5bf09d761926b3d70dbe
_

私が_git gc_した後、オブジェクトファイルさえもなくなりました。これで、すべてが10K未満を使用するパックファイルになりました。

_$ tree -h .git/objects/
.git/objects/
├── [ 102]  info
│   └── [  54]  packs
└── [ 136]  pack
    ├── [1.9K]  pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.idx
    └── [7.8K]  pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.pack
_

この回答 は、より自動化された方法でコミットからBLOBを取得する方法を示しています。

18
Schwern