[1] http://cacm.acm.org/magazines/2016/7/204032-why-google-store...
They aren't copying all the files like you do with Git. They have a custom set up that sounds like it lets you checkout just the parts you need. I don't have time to read the whole thing, but it sounds like it works by breaking down a "super repo" into small "sub repos". This actually makes sense.
There is no way working with a 300gb git repo is fun or efficient, and they've probably been doing that for years at Microsoft.
They're explicitly not doing that. They have a massive, monolithic repo, and then tooling for interacting with that monolithic repo without having to grab the whole thing. They are not using Git. You just read the section titled "Alternatives".
The merits of a "monorepo" have been hashed out previously[2], it's more nuanced than "lol, M$".
[1] https://code.facebook.com/posts/218678814984400/scaling-merc...
https://www.quora.com/Why-does-Facebook-have-so-much-of-thei...
https://www.wired.com/2015/09/google-2-billion-lines-codeand...
They may know something we don't :)
The numbers include test code, utilities, two entire web browsers, UI frameworks, etc.
Big companies, even successful companies aren't incapable of making, and continuing to make stupid decisions.
I'm sure each company has a reason for using a single massive repo. I doubt I would agree with their reason, but I'm sure they have one.
These may not be problems that everyone feels as sharply, but they can be problems that nearly everyone might face at some point. Having these problems isn't even necessarily a sign of bad architecture: at some point all of your software likely has to play nice together on the same machine.
Certainly there are solutions beyond just monorepos, but monorepos are a very well understood, ancient solution (that seems to be making a comeback of sorts, despite many of the other solutions being easier and more powerful today than they were back when monorepos were about the only solution).
[1] I've seen tools like Lerna (https://github.com/lerna/lerna) used for a managing several relatively small "monorepos" lately.
systemd
I'm also curious as to how they used to do it without git, maybe using TFS? I wonder what the timings on that were.
Anyway, I don't think GVFS is the way to go, and I hope that it either doesn't get accepted or doesn't play a role outside of Windows. It's good to see more Git usage, but hacking away instead of fixing the problematic project seems somewhat idiotic. I can imagine other tools having problems with a single project that size, are they going to hack those as well?
Microsoft: "We, only one of most technologically advanced companies with only the 2nd or 3rd highest market cap of any public company on the planet depending on the day, had a problem with infrastructure trying to manage possibly the largest software project that anyone has ever made. And then we solved it."
You: "Stop doing what you're doing and pay attention to meeeeeeeeeeee."
So there is no reason to fix their mistake of a code base.
However, when you see that a large company is doing something in a way that you thing is silly or strange, the logical thing to ask first is "what do they understand that I don't understand?". It won't always be the case, of course, but most of the time it will turn out you were missing something.
Assuming off the bat that they are idiots and you know a better way is staggeringly naive.
There's even a name for this: "Going from D to C - from disparagement to curiosity". I think I first heard it from @patio11.
If no company is using many small repos for truly massive projects, then it's hard to argue it would be a good idea. Could everyone who has looked at this problem make the wrong choice?
Amazon. They built an entire system around managing versions so that they can make it work.
Google reportedly used to use Perforce for their monolithic codebase, and Facebook is supposed to use Mercurial with a bunch of modifications. They all have huge code bases mostly in one repo (I've heard Facebook had a >50GB Git repository, and Google's codebase is supposed to be in the TB range).
I recently ran some experiments, one file per experiment, one result file per experiment. At around 100,000 files, git started getting very upset. Why shouldn't I be allowed to have 100,000 files, or a million files, in a directory? Why should it be my job, as a user, to manually rearrange my data into a format my computer is happier with?
I put all the records for https://www.findlectures.com in it, because then I can use diff tools for testing changes. Obviously this is nowhere near the size of the Windows codebase, but I could see a world where GVFS would be helpful for collaboration on this project.