Edit: read in another comment that you dropped the history. Understandable, but can appreciate how that would add to friction (devs having to look through two different histories).
- migrate the tip of a branch to Git (yes, the 300GB number is the tips of all the interesting branches, not the history)
- keep a Git branch and a SD branch in sync for a while
- be re-run over each of the 400+ branches they care about
But they went through some of the same trial-and-error process that you're describing.
Or maybe it was just the initial repo setup used for alpha testing that got promoted to production :)
Would you want to build chrome without it's icons for bookmark folders, the launcher, etc.? No?
What about a game without it's intro videos? Even if you need to debug a crash during the initial intro, related to playing said video?
Some people prefer this kind of content to be managed with a different, media focused version control system, or a separate tree, but now you have 2+ disparate distribution / version control systems to try and keep in sync. You do have options like git submodules now for some VCSes, but I haven't been impressed with their workflow, and they weren't always an option. I will gladly burn several gigs just to simplify my workflow - I've got the spare SSD and bandwidth. I've had fully built checkouts in the hundreds of gigabytes range.
And don't get me wrong, "hundreds of gigabytes" is getting annoyingly large if the IT department skimped and bought me a 250GB SSD. I'll abuse directory junctions to offload some of that onto mechanical drives. This is relatively fire and forget though - multi-repository is not.
Some of the MS teams were good about stripping those out for release, others, didn't seem to notice.