On Tue, 5 Apr 2011 11:23:38 +0300
Artiom Di <kro...@gmail.com> wrote:

> I have such commit:
> 
> $ git log -n1 --pretty=format:commit -m --first-parent --no-prefix
> --shortstat 1e68e16e7f06868210d63bb1623b976dcedd65e4 commit
>  2 files changed, 1290965 insertions(+), 5 deletions(-)
> 
> This operation consumes aprox 1.5Gb RAM.
> The question is: how to see if some given commit is really huge and
> not to load whole commit in RAM?
Each commit references a tree object which, in turn, references a set of
blobs and/or other tree objects referencing their own sets of blobs etc.
This hierarchy of trees represents the state of your index from which a
commit has been made.  IOW, "the size of a commit" is not recorded
anywhere explicitly--even in tree objects, and you have to inspect the
whole hierarchy of trees referenced by a commit to calculate its size.
This is not really hard as Git has low-level commands to read tree
objects and blobs.  On the other hand, I can't easily find any way to
know the size of a blob other than using
`git cat-file blob $SHA1 | wc -c`.
Note also that "the size of a commit" is a vague term: I might have a
one gigabyte file tracked in my repository; then I change a single byte
in it and make a commit--what should really count as the size of this
commit?  The change itself is only one byte, the blob representing this
change is one gigabyte.

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To post to this group, send email to git-users@googlegroups.com.
To unsubscribe from this group, send email to 
git-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/git-users?hl=en.

Reply via email to