Re: Calculating tree nodes
flat view
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:33
"Jon Smirl" [off-list ref] writes:
quoted
Yes. For performance reasons, since a simple commit would kill you in any reasonably sized repo.That's not an obvious conclusion. A new commit is just a series of edits to the previous commit. Start with the previous commit, edit it, delta it and store it. Storing of the file objects is the same. Why isn't this scheme fast than the current one?
I think you seem to be forgetting about tree comparison. With a large project that has a reasonable directory structure (i.e. not insanely narrow), a commit touches isolated subparts of the whole tree. Think of an architecture specific patch to the Linux kernel touching only include/asm-i386 and arch/i386 directories. Being able to cull an entire subdirectory (e.g. drivers/ which has 5700 files underneath) by only looking at the tree SHA-1 of the containing tree is a _HUGE_ win. And this is not just about two tree comparison. When you say: git log v2.6.20 -- arch/i386/ what you are seeing is a simplified history that consists of commits that touch only these paths. How would we determine if a commit touch these paths efficiently? By comparing the "i386" entry in tree objects for $commit^:arch and $commit:arch. You do not have to look inside arch/i386/ trees to see if any of the 330 files in it is different. You just check a single SHA-1 pair.