Mercurial > evolve
annotate docs/obs-concept.rst @ 519:9825c7da5b54 stable
ensure all file have a copyright notice
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Sat, 25 Aug 2012 14:43:34 +0200 |
parents | b398e9c2dbd1 |
children | b81193ef3488 |
rev | line source |
---|---|
519
9825c7da5b54
ensure all file have a copyright notice
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
357
diff
changeset
|
1 .. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
9825c7da5b54
ensure all file have a copyright notice
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
357
diff
changeset
|
2 .. Logilab SA <contact@logilab.fr> |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
3 ----------------------------------------------------------- |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
4 Why Do We Need a New Concept |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
5 ----------------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
6 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
7 Current DVCSes are great tools for forging a series of flawless |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
8 changesets on your own. But they perform poorly when it comes to |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
9 **sharing** some work in progress and **collaborating** on such work |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
10 in progress. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
11 |
173 | 12 When people forge a new version of a changeset they actually create a |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
13 new changeset and get rid of the original changeset. Difficulties to |
173 | 14 collaborate mostly came from the way old content is *removed* from |
15 a repository. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
16 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
17 Mercurial Approach: Strip |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
18 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
19 |
173 | 20 With the current version of mercurial, every changeset that exists in |
21 your repository is *visible* and *meaningful*. To delete old | |
22 (rewritten) changesets, mercurial removes them from the repository | |
23 storage with an operation called *strip*. After the *stripping*, the | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
24 repository looks as if the changeset never existed. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
25 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
26 This approach is simple and effective except for one big |
173 | 27 drawback: you can remove changesets from **your repository only**. If |
28 a stripped changeset exists in another repository it touches, it will | |
29 show up again. This is because a shared changeset becomes | |
30 part of a shared global history. Stripping a changeset from all | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
31 repositories is at best impractical and in most case impossible. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
32 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
33 As consequence, **you can not rewrite something once you exchange it with |
173 | 34 others**. The old version will still exist along side the new one [#]_. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
35 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
36 Moreover stripping changesets creates backup bundles. This allows |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
37 restoration of the deleted changesets, but the process is painful. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
38 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
39 Finally, as the repository format is not optimized for deletion. stripping a |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
40 changeset may be slow in some situations. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
41 |
173 | 42 To sum up, the strip approach is very simple but does not handle |
43 interaction with the outer world, which is very unfortunate for a | |
44 *Distributed* VCS. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
45 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
46 .. [#] various work around exists but they require their own workflows |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
47 which are distinct from the very elegant basic workflow of |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
48 Mercurial. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
49 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
50 Git Approach: Overwrite Reference |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
51 ----------------------------------------------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
52 |
173 | 53 The Git approach to repository structure is a bit more complex: there |
54 can be any amount of unrelated changesets in a repository, and **only | |
55 changesets referenced by a git branch** are *visible* and | |
56 *meaningful*. | |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
57 |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
58 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
59 .. warning:: add a schema:: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
60 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
61 C |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
62 | B---<foo> |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
63 |/ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
64 | |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
65 A |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
66 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
67 Only B and A are visible. |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
68 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
69 This simplifies the process of getting rid of old changesets. You can |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
70 just leave them in place and move the reference on the new one. You |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
71 can then propagate this change by moving the git-branch on remote host |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
72 with the newer version of the marker overwriting the older one. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
73 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
74 This approach goes a bit further but still has a major drawback: |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
75 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
76 Because you **overwrite** the git-branch, you have no conflict |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
77 resolution. The last to act wins. This makes collaboration on multiple |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
78 changesets difficult because you can't merge concurrent updates on a |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
79 changeset. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
80 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
81 Every overwrite is a forced operation where the operator says, "yes I |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
82 want this to replace that". In highly distributed environments, a user |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
83 may end up with conflicting references and no proper way to choose. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
84 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
85 Because of this way to visualize a repository, git-branches are a core |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
86 part of git, which makes the user interface more complicated and |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
87 constrains moving through history. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
88 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
89 Finally, even if all older changesets still exist in the repository, |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
90 accesing them is still painful. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
91 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
92 |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
93 ----------------------------------------------------- |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
94 The Obsolete Marker Concept |
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
95 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
96 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
97 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
98 As none of the concepts was powerful enough to fulfill the need of |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
99 safely rewriting history, including easy sharing and collaboration on |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
100 mutable history, we needed another one. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
101 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
102 Basic concept |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
103 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
104 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
105 |
173 | 106 Every history rewriting operation stores the information that old rewritten |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
107 changeset is replaced by newer version in a given set of changesets. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
108 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
109 All basic history rewriting operation can create an appropriate obsolete marker. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
110 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
111 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
112 .. figure:: ./figures/example-1-update.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
113 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
114 *Updating* a changeset |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
115 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
116 Create one obsolete marker: ``([A'] obsolete A)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
117 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
118 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
119 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
120 .. figure:: ./figures/example-2-split.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
121 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
122 *Splitting* a changeset in multiple one |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
123 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
124 Create one obsolete marker ``([B1, B2] obsolete B)]`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
125 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
126 |
234 | 127 .. figure:: ./figures/simple-3-merge.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
128 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
129 *Merging* multiple changeset in a single one |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
130 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
131 Create two obsolete markers ``([C] obsolete A), ([C] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
132 |
234 | 133 .. figure:: ./figures/simple-4-reorder.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
134 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
135 *Moving* changeset around |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
136 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
137 Reordering those two changesets need two obsolete markers: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
138 ``([A'] obsolete A), ([B'] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
139 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
140 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
141 |
234 | 142 .. figure:: ./figures/simple-5-delete.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
143 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
144 *Removing* a changeset: |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
145 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
146 One obselete marker ``([] obsolete B)`` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
147 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
148 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
149 To conclude, a single obsolete marker express a relation from **0..n** new |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
150 changesets to **1** old changeset. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
151 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
152 Basic Usage |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
153 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
154 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
155 Obsolete markers create a perpendicular history: **a versioned |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
156 changeset graph**. This means that offers the same features we have |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
157 for versioned files but applied to changeset: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
158 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
159 First: we can display a **coherent view** of the history graph in which only a |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
160 single version of your changesets is displayed by the UI. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
161 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
162 Second, because obsolete changeset content is still **available**. You can |
173 | 163 you can |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
164 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
165 * **browse** the content of your obsolete commits, |
173 | 166 |
167 * **compare** newer and older versions of a changeset, | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
168 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
169 * **restore** content of previously obsolete changesets. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
170 |
173 | 171 Finally, the obsolete marker can be **exchanged between |
172 repositories**. You are able to share the result on your history | |
173 rewriting operations with other prople and **collaborate on the | |
174 mutable part of the history**. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
175 |
173 | 176 Conflicting history rewriting operation can be detected and |
177 **resolved** as easily as conflicting changes on a file. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
178 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
179 |
173 | 180 Detecting and solving tricky situations |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
181 ----------------------------------------------------- |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
182 |
173 | 183 History rewriting can lead to complex situations. The obsolete marker |
184 introduces a simple representation for this complex reality. But | |
185 people using complex workflows will one day or another have to face | |
186 the intrinsic complexity of some real-world situation. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
187 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
188 This section describes possible situations, defines precise sets of |
173 | 189 changesets involved in such situations and explains how the error |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
190 cases can be resolved automatically using the available information. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
191 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
192 |
173 | 193 Obsolete changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
194 ```````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
195 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
196 Old changesets left behind by obsolete operation are called **obsolete**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
197 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
198 With the current version of mercurial, this *obsolete* part is stripped from the |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
199 repository before the end of every rewriting operation. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
200 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
201 .. figure:: ./figures/error-obsolete.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
202 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
203 Rebasing `B` and `C` on `A` (as `B'`, `C'`) |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
204 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
205 This rebase operation added two obsolete markers from new |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
206 changesets to old changesets. These two old changesets are now |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
207 part of the *obsolete* part of the history. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
208 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
209 In most cases, the obsolete set will be fully hidden to both the UI and |
173 | 210 discovery, hence users do not have to care about them unless they want to |
211 audit history rewriting operations. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
212 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
213 Unstable changesets |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
214 ``````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
215 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
216 While exploring the possibilities of the obsolete marker a bit |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
217 further, you may end up with *obsolete* changesets which have |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
218 *non-obsolete* children. There is two common ways to achieve this: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
219 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
220 * Pull a changeset based of an old version of a changeset [#]_. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
221 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
222 * Use a partial rewriting operation. For example amend on a changeset with |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
223 children. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
224 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
225 *Non-obsolete* changeset based on *obsolete* one are called **unstable** |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
226 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
227 .. figure:: ./figures/error-unstable.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
228 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
229 Amend `A` into `A'` leaving `B` behind. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
230 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
231 In this situation we cannot consider `B` as *obsolete*. But we |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
232 have all the necessary data to detect `B` as an *unstable* branch |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
233 of the history because its parent `A` is *obsolete*. In addition, |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
234 we have enough data to automatically resolve this instability: we |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
235 know that the new version of `B` parent (`A`) is `A'`. We can |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
236 deduce that we should rebase `B` on `A'` to get a stable history |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
237 again. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
238 |
173 | 239 Proper warnings should be issued when part of the history becomes |
240 unstable. The UI will be able to use the obsolete marker to | |
241 automatically suggest a resolution to the user of even carry them out | |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
242 for them. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
243 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
244 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
245 XXX details on automatic resolution for |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
246 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
247 * movement |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
248 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
249 * handling deletion |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
250 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
251 * handling split on multiple head |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
252 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
253 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
254 .. [#] For this to happen one needs to explicitly enable exchange of draft |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
255 changesets. See phase help for details. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
256 |
173 | 257 The two parts of the obsolete set |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
258 `````````````````````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
259 |
173 | 260 The previous section shows that there could be two kinds of *obsolete* |
261 changesets: | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
262 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
263 * an *obsolete* changeset with no or *obsolete* only descendants is called **extinct**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
264 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
265 * an *obsolete* changeset with *unstable* descendants is called **suspended**. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
266 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
267 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
268 .. figure:: ./figures/error-extinct.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
269 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
270 Amend `A` and `C` leaving `B` behind. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
271 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
272 In this example we have two *obsolete* changesets: `C` with no *unstable* |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
273 children is *extinct*. `A` with *unstable* descendant (`B`) is *suspended*. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
274 `B` is *unstable* as before. |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
275 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
276 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
277 Because nothing outside the obsolete set default on *extinct* |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
278 changesets, they can be safely hidden in the UI and even garbage |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
279 collected. *Suspended* changesets have to stay visible and available |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
280 until their unstable descendant are rewritten into stable version. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
281 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
282 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
283 Conflicting rewrites |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
284 ```````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
285 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
286 If people start to concurrently edit the same part of the history they will |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
287 likely meet conflicting situations when a changeset has been rewritten in two |
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
288 different ways. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
289 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
290 |
163
92b073d13f2d
more doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
161
diff
changeset
|
291 .. figure:: ./figures/error-conflicting.* |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
292 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
293 Conflicting rewrite of `A` into `A'` and `A''` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
294 |
173 | 295 This kind of conflict is easy to detect with an obsolete marker |
296 because an obsolete changeset can have more than one new version. It | |
297 may be seen as the multiple heads case. Mercurial warns you about this | |
298 on pull. It is resolved the same way by a merge of A' and A'' that | |
299 will keep the same parent than `A'` and `A''` with two obsolete | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
300 markers pointing to both `A` and `A'` |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
301 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
302 .. warning:: TODO: Add a schema of the resolution. (merge A' and A'' with A as |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
303 ancestor and graft the result of A^) |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
304 |
173 | 305 Allowing multiple new changesets to obsolete a single one allows to |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
306 distinguish a split changeset from a history rewriting conflict. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
307 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
308 Reliable history |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
309 `````````````````````` |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
310 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
311 Obsolete markers help to smooth rewriting operation process. However |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
312 they do not change the fact that **you should only rewrite the mutable |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
313 part of the history**. The phase concept enforces this rule by |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
314 explicitly defining a public immutable set of changesets. Rewriting |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
315 operations refuse to work on public changesets, but there are still |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
316 some corner cases where previously rewritten changesets are made |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
317 public. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
318 |
192
706a3a57b567
docs: Merged obs-concept changes by hand.
Arne Babenhauserheide <bab@draketo.de>
diff
changeset
|
319 Special rules apply for obsolete markers pointing to public changesets: |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
320 |
173 | 321 * Public changesets are excluded from the obsolete set (public |
322 changesets are never hidden or candidate to garbage collection) | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
323 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
324 * *newer* version of a public changeset are called **latecomer** and |
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
325 highlighted as an error case. |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
326 |
173 | 327 Solving such an error is easy. Because we know what changeset a |
328 *latecomer* tries to rewrite, we can easily compute a smaller | |
329 changeset containing only the change from the old *public* to the new | |
330 *latecomer*. | |
161
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
331 |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
332 .. warning:: add a schema |
4e3f25ba5401
More doc and index with sphynx
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
333 |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
334 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
335 Conclusion |
184
f047cd4f1235
backout obs-concept.rst changes
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
176
diff
changeset
|
336 ---------------- |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
337 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
338 The obsolete marker is a powerful concept that allows mercurial to safely handle |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
339 history rewriting operations. It is a new type of relation between Mercurial |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
340 changesets which tracks the result of history rewriting operations. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
341 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
342 This concept is simple to define and provides a very solid base for: |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
343 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
344 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
345 - Very fast history rewriting operations, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
346 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
347 - auditable and reversible history rewriting process, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
348 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
349 - clean final history, |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
350 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
351 - sharing and collaborating on the mutable part of the history, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
352 |
191
0f1b8119a281
Backed out backout changeset f047cd4f1235
Arne Babenhauserheide <bab@draketo.de>
parents:
184
diff
changeset
|
353 - gracefully handling history rewriting conflicts, |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
354 |
357
b398e9c2dbd1
doc: English proofreading
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
234
diff
changeset
|
355 - various history rewriting UI's collaborating with an underlying common API. |
166
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
356 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
357 .. list-table:: Comparison on solution [#]_ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
358 :header-rows: 1 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
359 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
360 * - Solution |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
361 - Remove changeset locally |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
362 - Works on any point of your history |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
363 - Propagation |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
364 - Collaboration |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
365 - Speed |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
366 - Access to older version |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
367 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
368 * - Strip |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
369 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
370 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
371 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
372 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
373 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
374 - `- -` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
375 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
376 * - Reference |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
377 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
378 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
379 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
380 - \ |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
381 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
382 - `-` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
383 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
384 * - Obsolete |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
385 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
386 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
387 - `++` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
388 - `++` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
389 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
390 - `+` |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
391 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
392 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
393 |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
394 .. [#] To preserve good tradition in comparison table, an overwhelming advantage |
8f8a52cd0b9f
big doc update
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
163
diff
changeset
|
395 goes to the defended solution. |