evolution.txt
56 lines
| 2.1 KiB
| text/plain
|
TextLexer
Martin von Zweigbergk
|
r47781 | Obsolescence markers make it possible to mark changesets that have been | ||
deleted or superseded in a new version of the changeset. | ||||
Unlike the previous way of handling such changes, by stripping the old | ||||
changesets from the repository, obsolescence markers can be propagated | ||||
between repositories. This allows for a safe and simple way of exchanging | ||||
mutable history and altering it after the fact. Changeset phases are | ||||
respected, such that only draft and secret changesets can be altered (see | ||||
:hg:`help phases` for details). | ||||
Obsolescence is tracked using "obsolescence markers", a piece of metadata | ||||
tracking which changesets have been made obsolete, potential successors for | ||||
a given changeset, the moment the changeset was marked as obsolete, and the | ||||
user who performed the rewriting operation. The markers are stored | ||||
separately from standard changeset data can be exchanged without any of the | ||||
precursor changesets, preventing unnecessary exchange of obsolescence data. | ||||
The complete set of obsolescence markers describes a history of changeset | ||||
modifications that is orthogonal to the repository history of file | ||||
modifications. This changeset history allows for detection and automatic | ||||
resolution of edge cases arising from multiple users rewriting the same part | ||||
of history concurrently. | ||||
Current feature status | ||||
====================== | ||||
This feature is still in development. | ||||
Instability | ||||
=========== | ||||
Rewriting changesets might introduce instability. | ||||
There are two main kinds of instability: orphaning and diverging. | ||||
Orphans are changesets left behind when their ancestors are rewritten. | ||||
Divergence has two variants: | ||||
* Content-divergence occurs when independent rewrites of the same changesets | ||||
lead to different results. | ||||
* Phase-divergence occurs when the old (obsolete) version of a changeset | ||||
becomes public. | ||||
It is possible to prevent local creation of orphans by using the following config:: | ||||
[experimental] | ||||
evolution.createmarkers = true | ||||
evolution.exchange = true | ||||
You can also enable that option explicitly:: | ||||
[experimental] | ||||
evolution.createmarkers = true | ||||
evolution.exchange = true | ||||
evolution.allowunstable = true | ||||