«Размер» коммита может означать разные вещи. Если вы имеете в виду, сколько дискового пространства занимает ... это очень сложно сказать в 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), созданных коммитом, а затем проверить их размер. Вы можете увидеть их в 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
указывает, что этот замененный объект большого двоичного объекта (файл) 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
исчез даже объектный файл. Теперь все находится в пакете размером менее 10 КБ.
$ tree -h .git/objects/
.git/objects/
├── [ 102] info
│ └── [ 54] packs
└── [ 136] pack
├── [1.9K] pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.idx
└── [7.8K] pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.pack
В этом ответе показано, как получить большие двоичные объекты из фиксации более автоматизированным способом.
person
Schwern
schedule
19.11.2016
-b
и-w
, могут использоваться для игнорирования изменений пробелов, но некоторые автоматические стилисты кода выходят за рамки простых изменений пробелов. - person Schwern   schedule 20.11.2016