如何用“git log”显示每次提交的大小?

问题描述 投票:0回答:2

如何获得

git log
的输出中显示的提交大小?

您可以将提交大小理解为其父级与其自身之间的差异,或者任何告诉您提交有多大的合理内容。

git log
有一个
--log-size
选项,但它是日志消息的大小,而不是提交本身。

git git-log
2个回答
40
投票

提交的“大小”可能意味着不同的事情。如果你的意思是它占用了多少磁盘存储空间……这在 Git 中很难分辨,而且可能效率低下。 SVN 之类的东西将提交存储为增量,而当您在 Git 中更改文件时,它会将文件的新副本存储为图形数据库中的对象。一个对象可以在多次提交中共享。虽然这听起来效率很低,但 Git 有许多巧妙的方法可以高效地使用磁盘空间。

如果你的意思是改变了多少行,那很简单。您可以使用各种标志来获取已更改的文件和行数,其中大多数都包含“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(+)

如果您想了解提交所代表的磁盘存储,您需要获取提交创建的新文件(blob 对象)的 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。


22
投票

git format-patch --stdout ref1..ref2 | wc -c


    format-patch
  • 为您提供
    ref1
    ref2
     之间的区别
    
    对于
  • ref1
  • /
    ref2
    ,您可以使用任何有效的 git 引用名称,例如
    a0b1c2d3
    HEAD
    HEAD~1
    等。
  • wc -c
  • 为您提供补丁的大小(以字节为单位)
    
    
  • 注意:git 提交元数据也将计入字节大小。这可能是此方法的一个功能或一个错误,具体取决于您到底想要什么信息。更多
git format-patch

和/或 unix pipeline/

grep
可能会给你更多的控制权。
    

© www.soinside.com 2019 - 2024. All rights reserved.