在 git 日志中显示提交大小
Show commit size in git log
如何获得 git log
输出中显示的提交大小?
您可能将提交大小理解为其父项与其自身之间的差异,或者任何合理的告诉您提交有多大的信息.
git log
有一个 --log-size
选项,但它是日志消息的大小,而不是提交本身。
提交的 "size" 可能意味着不同的事情。如果您指的是它占用了多少磁盘存储空间……在 Git 中很难说清楚,而且可能效率不高。而像 SVN 这样的东西将提交存储为增量,当你在 Git 中更改文件时,它会将文件的新副本存储为图形数据库中的对象。一个对象可以在多个提交中共享。虽然这听起来效率低下,但 Git 有许多聪明的方法可以非常有效地使用磁盘 space。
如果你的意思是它改变了多少行,那很简单。您可以使用各种标志来获取更改了多少文件和行,其中大多数都包含 "stat" 一词。例如,git log --shortstat
会告诉您更改了多少个文件,插入和删除了多少行。这是一个例子。
commit e3d1909c875ea0c1a64246d735affa039ad11aa0 (origin/master, origin/HEAD)
Author: Michael G. Schwern <schwern@pobox.com>
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 <schwern@pobox.com>
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
表示这个用 538440f 替换的 blob 对象(文件)1d539bd 并使用权限 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
This answer 展示了如何以更自动化的方式从提交中获取 blob。
这是一个真正 simplistic/brute 强制执行此操作的方法:
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
and/or unix pipeline/grep
可能会给你更多的控制权。
如何获得 git log
输出中显示的提交大小?
您可能将提交大小理解为其父项与其自身之间的差异,或者任何合理的告诉您提交有多大的信息.
git log
有一个 --log-size
选项,但它是日志消息的大小,而不是提交本身。
提交的 "size" 可能意味着不同的事情。如果您指的是它占用了多少磁盘存储空间……在 Git 中很难说清楚,而且可能效率不高。而像 SVN 这样的东西将提交存储为增量,当你在 Git 中更改文件时,它会将文件的新副本存储为图形数据库中的对象。一个对象可以在多个提交中共享。虽然这听起来效率低下,但 Git 有许多聪明的方法可以非常有效地使用磁盘 space。
如果你的意思是它改变了多少行,那很简单。您可以使用各种标志来获取更改了多少文件和行,其中大多数都包含 "stat" 一词。例如,git log --shortstat
会告诉您更改了多少个文件,插入和删除了多少行。这是一个例子。
commit e3d1909c875ea0c1a64246d735affa039ad11aa0 (origin/master, origin/HEAD)
Author: Michael G. Schwern <schwern@pobox.com>
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 <schwern@pobox.com>
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
表示这个用 538440f 替换的 blob 对象(文件)1d539bd 并使用权限 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
This answer 展示了如何以更自动化的方式从提交中获取 blob。
这是一个真正 simplistic/brute 强制执行此操作的方法:
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
and/or unix pipeline/grep
可能会给你更多的控制权。