Mercurial: keep default branch “active”

2019-03-15 06:39发布

问题:

I am using mercurial with named branches, and notice that when I create a new branch of default, default is marked as an inactive branch. Eg:

C:\data\solutions\test-repo>hg branches
default                        0:aeec280e6310

C:\data\solutions\test-repo>hg branch feature-branch
marked working directory as branch feature-branch

C:\data\solutions\test-repo>hg com -m "created new branch"

C:\data\solutions\test-repo>hg branches
feature-branch                 1:1cb18d7fa554
default                        0:aeec280e6310 (inactive)

This is a problem because our deployment system shows named branches that are active, which can be deployed from.

How can I keep my default branch "active" ?

回答1:

The notion of "active" and "inactive" branches is something we're moving away from in the Mercurial project. The problem is simply that branches can flip back and forth between the two states more or less randomly and at inconvenient times — as you've just seen.

Instead, we're now focussing on "open" vs "closed". This is an explicit notion: to close a branch head, you do

$ hg update feature-branch
$ hg commit --close-branch -m "passes all tests, ready for merging"

That will add a special changeset that marks the branch head as closed. When all heads on a branch are closed, the branch itself it considered closed and will disappear from hg branches. I recommend closing before merging, please see my named branch guide for a longer example.

So I suggest you change your deployment system to show open branches (hg branches) instead of active branches (hg branches --active).



回答2:

Inactive only means it has not a head.

In your case the graph is like this:

default:        0 -\
feature-branch:     \- 1 --- *

* means the "working dir

When you do more fixes in your feature (like nodes 2 and 3) this will be the aspect:

default:        0 -\
feature-branch:     \- 1 --- 2 --- 3 ---- *

When you want to integrate feature-branch into the default just update to the default

default:        0 -\--------------------- *
feature-branch:     \- 1 --- 2 --- 3

and then merge feature-branch into the default:

default:        0 -\-------------------/- *
feature-branch:     \- 1 --- 2 --- 3 -/

The fact that it appears "inactive" is not meaning you can't work with it. For example, your "deployment scripts" can have a hg update --clean default that will perfectly work even if it appeared as "inactive".

Inactive just meant it had no heads. Nothing else. After merging it will become active and it will be feature-branch which will become "inactive".

Don't mind its active/inactive state, just work with it normally.