Reading a few "Why a DVCS is better" answers to several question on Programmers.SE they all seem to say that in general, DVCS is better since you don't have a commit race in large projects, IE commit, out of date so update, commit, out of date again, commit, still out of date, etc.
DVCS limit this with the concept of the push. However in very large projects wouldn't there be a "push race", especially at the end of the day? I know in Git this is somewhat remedied by the constant branching for everything, but in Mercurial you don't branch, you create a new head.
Problem I see
- User attempts to push
- Out of date (mercurial won't let you push if your local repo is out of date), so you pull and merge your local changes
- User attempts to push again but while they were merging someone else pushed, so they are out of date again
- Pull and merge again
- Still out of date
- Repeat
Sound familiar?
Is this an actual problem with very large and popular mercurial repos? What about inside a company when everyone does their final push of the day?
hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
--close-branch
when committing -- and mercurial has named branches, you don't have to clone to a new directory