threads / discuss / 43124

Average size of git bookkeeping data (related to Using git as a general backup mechanism)

Subject: Average size of git bookkeeping data (related to Using git as a general backup mechanism)

## tl;dr

3 messages between Dec 13, 2006 and Dec 20, 2006.

replies: 2people: 3as markdown or json

David Tweed· Dec 13, 2006, 19:31 UTC · lore

Hi, This is in connection with the "Using git as a general backup mechanism" thread, but on a different slant more along automatic versioning a subset of the files on the disc (to avoid sucking in things like core files and particularly huge multimedia files). In this case I don't want to discard old "backups" but just grow the chronological database. (Think a more selective version of Plan 9's venti filesystem.)

How big is the "metadata" or "bookeeping data" in git related to a commit? (Eg, "around x bytes per changed file" or "around x bytes per file being tracked (whether changed in the commit or not)" )

[I'm trying to get a feel for, if I switched to git, how much overhead would come from having a cron job automatically doing a snapshot every hour (if anything has changed), plus manual snapshots at points where I want to feel "safeguarded". I'm currently using my own simple, hacked together system for combined versioning/backups that does this. Using naive tools that don't account for wastes space due to disk block size effects the data being tracked is currently just under 9 months of acitvity on 2016 filenames with 17457599 bytes of data (ie, compressed version of their contents at various times) and 7838546 bytes is "metadata", ie, 30 percent of the stored data is metadata. This is in a format using 6 bytes to associate a single blob of contents to a filename (whether changed since last snapshot or not).]

Many thanks for any insight,
cheers, dave tweed
Johannes Schindelin· Dec 14, 2006, 00:02 UTC · re: David Tweed · lore

Re: Average size of git bookkeeping data (related to Using git as a general backup mechanism)

Hi,
On Wed, 13 Dec 2006, David Tweed wrote:
> How big is the "metadata" or "bookeeping data" in git related to a 
> commit?

In my experience, a single commit (with the trees and blobs being reachable from it) takes about the same space in a pack as the corresponding tar ball.

When you add revisions, the pack grows approximately with the compressed patch size.

So, if you can estimate the size of the initial tar ball and the size of the subsequent patches, you have a ballpark figure of the metadata size of the git repository. (This is for the bare case; for the regular case you have to add the size of a checked out tree, of course.)

Hth, Dscho

David Lang· Dec 20, 2006, 01:20 UTC · re: David Tweed · lore

Re: Average size of git bookkeeping data (related to Using git as a general backup mechanism)

On Wed, 13 Dec 2006, David Tweed wrote:
Show 11 quoted lines
> How big is the "metadata" or "bookeeping data" in git related to a commit? (Eg, "around x bytes per changed file"
> or "around x bytes per file being tracked (whether changed in the commit or not)" )
>
> [I'm trying to get a feel for, if I switched to git, how much overhead would come from having a cron job automatically doing
> a snapshot every hour (if anything has changed), plus manual snapshots at points where I want to feel "safeguarded".
> I'm currently using my own simple, hacked together system for combined versioning/backups that does
> this. Using naive tools that don't account for wastes space due to disk block size effects the data being
> tracked is currently just under 9 months of acitvity on  2016 filenames with
> 17457599 bytes of data (ie, compressed version of their contents at various times) and 7838546 bytes
> is "metadata", ie, 30 percent of the stored data is metadata. This is in a format using 6 bytes to associate a single blob of
> contents to a filename (whether changed since last snapshot or not).]

if nothing has changed it will take the space of the commit tag, as the tree will remain the same (and you should be able to script detection of this case and make it zero overhead)

if something has changed you will have the new tree and the changed object

in a tree each object is ~28 bytes (IIRC from what Linus mentioned in the last week or two)

a loose object is compressed, and if you repack it will delta against prior versions for even more space savings

look at the size of the mozilla tree and the kernel tree and you will see that when packed git is about as efficiant as any other option you have (and more efficiant than most)

← back to recent threads