Size: 1608
Comment:
|
Size: 1707
Comment: link to extension implementation
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
## page was renamed from BranchRenaming | |
Line 3: | Line 4: |
= Branch Renaming = | = Mutable Branches = '''This extension is not distributed with Mercurial.''' |
Line 5: | Line 7: |
A recurring compliant against [[NamedBranches|named branches]] is that the name is permanent. This page describes a backward-compatible proposal to separate a branch's identity from its name. | ''Author: Gideon Sireling Repository: http://code.accursoft.com/mutable-branches/ Issue tracker: http://code.accursoft.com/mutable-branches/issues'' |
Line 9: | Line 15: |
== Overview == The mutable-branches extension allows [[NamedBranches|named branches]] to be renamed, without rewriting history. This is achieved by separating a branch's identity from its name. |
|
Line 11: | Line 21: |
An .hgbranches file in the working directory will keep a mapping of branch IDs to their names. When a new branch is created, the changeset's branch field will be set to a unique ID. An entry will then be made in .hgbranches, mapping the branch's ID to its name. | To start renaming branches, create a file called .hgbranches in the root of the working directory. Each line in .hgbranches consists of a space-delimited pair such as oldBranch newBranch. If the branch name contains spaces, it should be quoted. |
Line 13: | Line 23: |
This is all done behind the scenes - there are no changes to Mercurial's UI. | There are no changes to Mercurial's UI, other than not scolding the user when they create a new branch. |
Line 21: | Line 31: |
If the user creates a local branch which they do not intend pushing, it can be recorded in .hg/localbranches. Mercurial should warn the user if they attempt to push a changeset whose branch name is recorded in localbranches, and tell them how to move it to .hgbranches. | If the user creates a local branch which they do not intend pushing, it can be recorded in .hg/localbranches. |
Line 30: | Line 40: |
Line 32: | Line 41: |
CategoryNewFeatures CategoryDeveloper | CategoryExtensionsByOthers |
Mutable Branches
This extension is not distributed with Mercurial.
Author: Gideon Sireling Repository: http://code.accursoft.com/mutable-branches/ Issue tracker: http://code.accursoft.com/mutable-branches/issues
Contents
1. Overview
The mutable-branches extension allows named branches to be renamed, without rewriting history. This is achieved by separating a branch's identity from its name.
2. Visioning Branch Names
To start renaming branches, create a file called .hgbranches in the root of the working directory. Each line in .hgbranches consists of a space-delimited pair such as oldBranch newBranch. If the branch name contains spaces, it should be quoted.
There are no changes to Mercurial's UI, other than not scolding the user when they create a new branch.
3. Conflicts
If conflicting changes have been made to .hgbranches on different branches, or if it contains conflicting entries, this will be resolved by the same rules that apply to .hgtags.
4. Local Branches
If the user creates a local branch which they do not intend pushing, it can be recorded in .hg/localbranches.
5. Backwards Compatibility
If a branch ID is not recorded in .hgbranches or .hg/localbranches, the ID will be used as the branch name. Thus, existing branches can be used (and renamed) without any modifications. If the branch is renamed, older clients will continue to use the old name.
6. Forwards Compatibility
Future development could add other fields to .hgbranches, such as description or owner.