The mixed-revisions bug was fun… Also cannot clean history or make shitty branches everywhere, it was one of my worst experience. Nowadays Jujutsu is my favorite.
It caters more for a linear workflow, though. So modern large teams won’t find joy with SVN
For what it’s worth, I work at a FAANG company and we don’t use branches at all. Instead, we use feature flags. Source control history is linear with no merges.
All code changes have to go though code review before they can be committed to the main repo. Pull requests are usually not too large (we aim for ~300 lines max), contain a single commit, aren’t long-lived (often merged the same day they’re submitted unless they’re very controversial), can be stacked to handle dependencies between them (“stacked diffs”), and a whole stack can be landed together. When merged, everything is committed directly to the main branch, which all developers are working off of.
I know that both Google and Meta take this approach, and probably other companies too.
The bottom picture should be SVN. I miss incremental revision numbers.
The mixed-revisions bug was fun… Also cannot clean history or make shitty branches everywhere, it was one of my worst experience. Nowadays Jujutsu is my favorite.
SVN is still great if there is a need for strict access controls and central control matters a lot. Auditing is also a bit easier with SVN.
It caters more for a linear workflow, though. So modern large teams won’t find joy with SVN.
For what it’s worth, I work at a FAANG company and we don’t use branches at all. Instead, we use feature flags. Source control history is linear with no merges.
All code changes have to go though code review before they can be committed to the main repo. Pull requests are usually not too large (we aim for ~300 lines max), contain a single commit, aren’t long-lived (often merged the same day they’re submitted unless they’re very controversial), can be stacked to handle dependencies between them (“stacked diffs”), and a whole stack can be landed together. When merged, everything is committed directly to the main branch, which all developers are working off of.
I know that both Google and Meta take this approach, and probably other companies too.
What’s the difference between that and feature branches? Sounds like you still have PRs that get merged to main from somewhere - forked repos I guess?
This makes me happy. 🙂
Trunk based dev is GOAT.
git rev-list HEAD | wc -l