A lot of "git vs. hg" explanations align Mercurial bookmarks with usual git branches in terms of functionality. I'm trying to understand the differences not between Mercurial branches and git ones, but between bookmarks and topics coming from Evolve extension.
One of the important differences I figured out is the topic name gets embedded into every commit, while bookmark is just a tag moving from one commit to another. But what does it entail? And what are the other differences?
Bookmark is (mutable) pointer to single changeset, topics are (after all) "classic" hg-branches with most branch-specific things
Topic branches are lightweight branches which disappear when changes are finalized (moved to the public phase). Bookmarks have to be deleted by hand.
Bookmarks can be (easy) pushed and pulled between repositories. Topic-exchange (as topics) require some additional actions for work through a non-publishing server.
Sample (shortened) of topic lifecycle from Topic Tutorial
Repo with topic before push
Because
food
was created on base ofdefault
after pushing to the publishing server I got the same changesets, just in target branch only