We actually discourage using Mercurial's named branches, especially for new users, as it can impact normal usage patterns in odd ways (such as your force-push-by-default problem).
I have opened a feature request to make an extension that offers to force a push if the initial push fails. Just to be honest, we are unlikely to enable this extension by default; most users are going to get that error when they've forgotten to run
hg pull and
hg merge prior to pushing, and the Mercurial team has already discovered from testing that, as-is, new users still ignore what the message is telling them and simply run
hg push -f more often than we'd like. In the meantime, though, since it appears that you always want to force push, you can just add these lines to your
push = push -f
at which point
hg push will always create new remote heads when necessary.
We do not consider branch repositories to be lightweight--they are full, independent clones--but they should not be slow. Making a branch of a 1.5 GB repository in my Kiln On Demand account takes 7 seconds; if it's taking 90 seconds for you, we'd really like more details, because that's a bug we'd really like to fix.
That said, you're correct that branch repositories are not meant to be used in a branch-per-mini-feature manner. They're meant to be used for developer sandboxes and longer-running communal branch work. For example, at Fog Creek, most developers have personal branch repositories off the main central repository that we check into when we're doing something more substantial than a tiny bug fix. Then, on the client, rather than having a checkout for each branch/central repo, we might just have a push alias in the repository's
.hg/hgrc file. For example, my FogBugz clone currently has the following in its
default = http://ourkiln/Repo/FogBugz/Group/7-2
benjamin = http://ourkiln/Repo/FogBugz/Group/benjamin
In this case, for normal, bug-fix work, I can just run
hg push and send it right to the central repository. When I know I'm doing something more long-winded that's going to need to be reviewed, I can instead run
hg push benjamin.
To monitor everything going on, you can use Kiln's Activity Feed, which lets you filter by project, by repo, by user, or by a combination of those. You can subscribe to the activity feed via RSS. This makes it very easy to see all activity going on in a project. Even if you use Mercurial named branches, the activity feed may prove useful as a way for monitoring the entire state of a project across otherwise-unrelated repositories.