- Facebook does not use Git due to scale issues with their large monorepo, instead opting for Mercurial.
- Mercurial may be a better option for large monorepos, but Git has made improvements to support them better.
- Despite some drawbacks, Git usage remains dominant with 93.87% share, due to familiarity, additional tools, and industry trends.
Facebook uses Mercurial, but when people praise their developer tooling it’s not just that. They’re using their CLI which is built on top of Mercurial but cleans up its errors and commands further, it’s all running on their own virtual filesystem (EdenFS), their dev testing in a customized version of chromium, and they sync code using their own in-house equivalent of GitHub, and all of it connects super nicely into their own customized version of VS Codium.
Damn that sounds sick
The source control was so smooth and pleasant that it convinced me that git isn’t the be all end all, and the general developer focus was super nice, but some of that tooling was pretty janky, poorly documented, and you had no stack overflow to fall back on. And some of it (like EdenFS), really felt like it was the duct tape holding that overloaded monorepo together (complete with all the jankiness of a duct tape solution).
What you can do with 84000 employees
And some good management. Probably not a common opinion around here, but my company is not a tenth of that size, with a hundredth the number of devs, yet different teams still end up copy pasting libraries. Because it’s faster than convincing management DevOps is important.
And kinda horrifying. If something goes wrong, no Google, it’s straight to IT
There’s probably specific ticket queues and wiki/doc spaces for each support team.
Problem with an app? Send it to the internal dev/support team. Then if needed it gets routed.
deleted by creator
The inhouse tooling from the massive tech companies is very cool but I always wonder how that impacts transferrable skills. I work in a much smaller shop but intentionally make tech decisions that will give our engineers a highly transferrable skill set. If someone wants to leave it should be easy to bring their knowledge to bear elsewhere.
I’m pleased to report that
git
has made significant strides, andgit submodule
can now be easily used to achieve a mono-repo-like level of painful jankiness.And they’re delivering a terrible product.
That’s hardly the VCS’s fault.
That depends on who you believe their customer to be.
My best VCS experience so far was when working with Plastic SCM. I like how it can track merges, the code review workflow is also nice, and in general it was pretty nice to work with.
Fuck Unity, who paywalled it into unusability, though. Another amazing project that was bought and killed by absurd monetization by Unity, same as Parsec.
How was Parsec before the acquisition?
I only really have experience after, and it’s the only Unity product I’ve actually found that I like. My only major complaint is that it’s not compatible with the base configuration of Palo Alto, but that’s really more of a Palo Alto problem than a Parsec problem.
As far as performance goes, Microsoft did manage to make it work for them later on (…with many contributions upstreamed and homegrown solutions developed).
Mercurial does have a few things going for it, though for most use-cases it’s behind Git in almost all metrics.
I really do like the fact that it keeps a commit number counter, it’s a lot easier to know if “commit 405572” is newer than “commit 405488” after all, instead of Git’s “commit ea43f56” vs “commit ab446f1”. (Though Git does have the describe format, which helps somewhat in this regard. E.g. “0.95b-4204-g1e97859fb” being the 4204th commit after tag 0.95b)
I suspect rebasing makes sequential commit IDs not really work in practice.
Rebasing updates the commit ids. It’s fine. Commit IDs are only local anyway.
One thing that makes mercurial better for rebase based flows is obsolescence markers. The old version of the commits still exist after a rebases and are marked as being made obsolete by the new commits. This means somebody you’ve shared those old commits with isn’t left in hyperspace when they fetch your new commits. There’s history about what happened being shared.
That’s exactly the same in
git
. The old commits are still there, they just don’t show up ingit log
because nothing points to them.Old, unreachable commits will be garbage collected.
Does that not happen with Mercurial? If not that seems like a point against it.
Commit IDs are only local anyway.
Whay do you mean by that?
What kind of RCS is used always depends on the organisation. We are actually using GIT and SVN, and both make sense for the departments that are using them.
Serious question, why do they use SVN, as in what does SVN better than Git for the department using it?
The manager likes it.
While I’m not using it, since we started our small-team hobby project in git and moving away from it would be a bother, there is one use-case of SVN that would save us a lot of headaches.
SVN being centralized means you can lock files. Merging Unity scenes together is really pain, the tooling mostly doesn’t work properly and you have no way how to quickly check that nothing was lost. Usually, with several people working on a scene, it resulted in us having to decide whose work we will scratch and he will do it again, because merging it wouldn’t work properly and you end up in a situation where two people each did hundreds or thousands of changes to a scene, you know that the Unity mergetool is wonky at best, and checking that all of those changes merged properly would take longer and be more error prone than simply copying one persons work over the other.
We resorted to simply asking in chat if anyone has any uncommited work, but with SVN (or any other centralized VSC, I suppose) we wouldn’t have to bother with that - you simply lock the scene file and be safe.
Right, completely forgot that locking exists in SVN, and I guess it definitely makes sense if you’re collaboratively editing unmergeable files.
Thanks!
Git LFS does actually support file locking. But in general I find LFS to be hackily pasted onto Git and not very good (as with submodules).
Because we always used it!
And google uses Piper to do the same thing
Split up the monorepo?
That brings more problems. Despite the scaling challenges monorepos are clearly the way to go for company code in most cases.
Unfortunately my company heavily uses submodules and it is a complete mess. People duplicating work all over the place, updates in submodules breaking their super-modules because testing becomes intractable. Tons of duplicate submodules because of transitive dependencies. Making cross-repo changes becomes extremely difficult.