> --depth <depth>: Create a shallow clone with a history truncated to the specified number of revisions.
If the OS and applications that are creating and modifying files are all honest about the file dates, it should be possible to only scan dates instead of reading out every file. Or even use ionotify-like events to track what changed.
[1]: http://git-scm.com/docs/git-clone
EDIT: As sisk points out below --depth itself is not new, but as of 1.9 the limitations that previously came with shallow clones were lifted. Thanks sisk.
https://github.com/git/git/commit/82fba2b9d39163a0c9b7a3a2f3...
https://news.ycombinator.com/item?id=7648802
In 2011 they had 10 millions LoC, up to 500 commits a day,
but if we asssume the plots keeps going up like this, now in 2014 it can be pretty big.
Their binary was 1.5GB when the paper was written.
I wrote https://github.com/polydawn/mdm/ to help with this. It goes a step further and puts each binary version in a separate root of history, which means you can pull down only what you need.
Don't other people do that, too? What's the benefit of having binaries stored? I've never needed that; I've never worked on any huge projects, so I might be missing something crucial.
As for images, icons, fonts and similar, I just have a build script that copies/generates them, if it's needed.
I guess I've always been a little bit "obsessed" about the tidiness of my repositories.
There's only so much git gc can do. We've got a 500MB repo (.git, excluding working copy) at work, for 100k revisions. That's with a fresh clone and having tried most combinations of gc and repack we could think of. Considering the size of facebook, I can only expect that their repo is deeper (longer history in revisions count), broader (more files), more complex and probably full of binary stuff.
Of course not, it's an actual project. There is code, there are data files (text and binary) and there are assets.