Differences between revisions 14 and 21 (spanning 7 versions)
Revision 14 as of 2012-11-10 16:21:43
Size: 1829
Editor: 93-172-184-196
Comment:
Revision 21 as of 2012-11-24 19:59:12
Size: 1725
Editor: 93-173-165-121
Comment: local branch renaming not implemented
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:
{X} This page describes a proposal that was rejected for core Mercurial. However, it may be implemented as a third party extension. = Mutable Branches =
''Author: Gideon Sireling
Line 6: Line 7:
= Mutable Branches = Repository: http://code.accursoft.com/mutable-branches/
Line 8: Line 9:
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. Issue tracker: http://code.accursoft.com/mutable-branches/issues''
Line 12: Line 13:
== Visioning Branch Names == == Overview ==
Line 14: Line 15:
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. 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.

== Renaming Branches ==

To start renaming branches, create a file called `.hgbranches` in the root of the working directory, and check it in. 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 20: Line 25:
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. 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`.
Line 24: Line 29:
If the user creates a local branch which they do not intend pushing, it can be recorded in .hg/localbranches. If the user creates a local branch which they do not intend pushing, it can be recorded in `.hg/localbranches`. ''This feature has not yet been implemented.''
Line 28: Line 33:
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. 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.
Line 32: Line 37:
Future development could add other fields to .hgbranches, such as description or owner.

== Similar Implementations ==

The [[http://bitbucket.org/andre_felipe_dias/hg-ibranch|hg-ibranch]] extension implements a similar concept, but uses tip markers instead of .hgbranches.
Future development could add other fields to `.hgbranches`, such as description or owner.
Line 39: Line 39:
CategoryRejectedProposal CategoryExtensionsByOthers

Mutable Branches

Author: Gideon Sireling

Repository: http://code.accursoft.com/mutable-branches/

Issue tracker: http://code.accursoft.com/mutable-branches/issues

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. Renaming Branches

To start renaming branches, create a file called .hgbranches in the root of the working directory, and check it in. 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. This feature has not yet been implemented.

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.


CategoryExtensionsByOthers

MutableBranches (last edited 2019-08-22 10:56:57 by gidyn)