How to handle big repositories with Git
blogs.atlassian.com
blogs.atlassian.com
(The disk space problem is far less of an issue - disk space is cheap, and networks are pretty fast, so up to some medium repository size of (I suppose) hundreds of GB you can actually just let it build up. This doesn't scale completely, but for many projects, possibly even most of them, if everybody has a copy of absolutely everything, it's no problem.)
For whatever reason DVCS users often have a bit of a blind spot in this regard. Because DVCSes are good, the thinking often seems to run, if DVCSes handle something poorly, that must be something that revision control simply isn't to be used for. ("You must be using it wrong. Try storing everything on a shared drive and take daily backups and coordinate access using physical tokens.") Which is wrong, because revision control is for everybody, not just the programmers. People who work on unmergeable binary files need it too.
But fortunately, even if git/etc. and their users doesn't care about you, you're not completely stuck. if you have lots of binary files your needs are fairly well served by Perforce, and you can probably get on OK with SVN and its locking facility.
Having said that, some DVCSes do support a form of locking - similarly to changes, tags, etc, locks can be created and pushed / pulled. An example would be Veracity's implementation:
http://veracity-scm.com/qa/questions/1105/how-do-file-locks-...
Obviously this is not quite as foolproof as with a centralised version control system, but using strict workflows (i.e. always pushing locks immediately and pulling before you work on binary files) could create a workable compromise. I suppose you could create some plugins for your favourite DVCS to emulate this behaviour, and to enforce the workflow.
Did you even see what this does?
Yeah 15 million lines of code isn't a massive repository, it is medium-large at best. Any one of the big enterprise software companies has repos an order of magnitude bigger for each major product they sell.
It looks like git-bigfiles was abandoned years ago, after making very little progress, and neither bitbucket nor github seem to usefully support git-annex.
http://mercurial.selenic.com/wiki/LargefilesExtension
I think this must be one of the reasons why hg has some popularity in gamedev.
I personally haven't come across any need to use anything except shallow clones in large repos. Most of the time, you want to keep those other topic branches regardless.
They've linked to their previous most regarding submodule in the post[1], but it's worth re-mentioning that if you need to use submodule, you should almost always use subtree.
[1]: http://blogs.atlassian.com/2013/05/alternatives-to-git-submo...
I am not so concerned about version tracking/management so much as just a good way to sync large amounts of data while having a git–like CLi arsenal. Or a comparable CLi solution, or API with decent version tracking and solid support.
I have mounted google drive as a linux volume which is buggy to say the least. I have used github, and local git repos, but I am wondering if I am missing out on anything.
For example, BitTorrent has a Sync tool that seems close to what I want.
Subsequent pulls can be done directly to the remote repository.
Some of the collection repositories are pretty big. One collection has 21000 5MB JPGs. Another has 283 190MB files. Some operations do indeed take time, but you expect that when you're working with so many files. git-annex is awesome!
if you only want uni-directional synchronisation, then maybe just use rsync?
this is distinct from your use case as i'm not using it to sync with remote machines, but it might be worth checking out.
that said, it's not like that doesn't introduce other problems
Repo was born to resolve this kind of problem, but it might not be a "good" one. We (git/gerrit team at Google) are working on bring cross-repository atomic submit and other stuff to git/gerrit and our goal is to replace repo with git submodule.
Here're a very brief slides[1] and notes[2] about this topic at this year's Gerrit User Summit.
[1] https://docs.google.com/presentation/d/1qG1eAiDmyozZBiVE6R4A...
[2] https://docs.google.com/document/d/1a2eFhVr1HUiKOjhaRHn_89mf...