Причина, по которой Mercurial сливается лучше, чем CVS или Subversion, заключается в том, что он отслеживает самого последнего общего предка двух голов / веток, поэтому вам нужно убедиться, что вы предоставляете эту информацию точно, или вы, вероятно, получитехудшее слияние.
Если вы сделаете что-то вроде этого:
hg init newrepo
cd newrepo
cvs checkout POINT_OF_DIVERGENCE
hg commit --addremove -m 'commiting point of divergence'
cvs checkout BRANCH
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'committing branch head'
hg update -r 0 # jump back to point of divergence
cvs checkout HEAD
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'commiting HEAD head'
hg merge
, то общим предком для двух голов будет точка расхождения (извините, если команды CVS неверны, этобыл, к счастью, долгое время).
Проблема в том, что в репозитории CVS находится POINT_OF_DIVERGENCE - CVS вообще этого не отслеживает, поэтому собственное слияние не использует его.
Лучшие практики CVS всегда предполагают, что всякий раз, когда вы разветвляетесь, вы создаете тег, который отмечает точку расхождения, но если вы этого не сделали, то впереди вас ждет сложная охота.
Безправильный последний предок, Mercurial Merge не будет лучше, чем CVS.