4 |
4 |
5 |
5 |
6 Here are various Materials on planned improvement to mercurial regarding |
6 Here are various Materials on planned improvement to mercurial regarding |
7 rewriting history. |
7 rewriting history. |
8 |
8 |
9 The effort splits in two parts: |
9 First read about what challenge arise while rewriting history and how we plan to solve them once and for all. |
|
10 |
|
11 .. toctree:: |
|
12 :maxdepth: 2 |
|
13 |
|
14 unstability |
|
15 |
|
16 The effort is splits in two parts: |
10 |
17 |
11 * The **obsolete marker** concept aims to provide and alternative to ``strip`` |
18 * The **obsolete marker** concept aims to provide and alternative to ``strip`` |
12 to get ride of changesets. |
19 to get ride of changesets. |
13 |
20 |
14 * The **evolve** mercurial extension to rewrite history using *obsolete marker* |
21 * The **evolve** mercurial extension to rewrite history using *obsolete marker* |
25 |
32 |
26 Evolve is an experimental history rewriting extensions that use obsolete |
33 Evolve is an experimental history rewriting extensions that use obsolete |
27 markers. It is inspired from MQ and pbranch but have multiple advantage over |
34 markers. It is inspired from MQ and pbranch but have multiple advantage over |
28 them: |
35 them: |
29 |
36 |
30 * sticks to "Work where you are" philosophy (I'll need better wording |
37 * Focus on your current work. |
31 for that) |
38 |
|
39 You can focus your work on a single changeset and take care of adapting |
|
40 descendent changeset later. |
32 |
41 |
33 * Handle **non-linear history with branches and merges** |
42 * Handle **non-linear history with branches and merges** |
34 |
43 |
35 * Use **robust merge** mechanism of mercurial. |
44 * Rely internally on **robust merge** mechanism of mercurial. |
36 |
45 |
37 simple conflict are handled by real merge tools using appropriate ancestor. |
46 Simple conflict are handled by real merge tools using appropriate ancestor. |
38 Conflict are much rarer and much more user friendly. |
47 Conflict are much rarer and much more user friendly. |
39 |
48 |
40 * Mutable history **fully available all the time**. |
49 * Mutable history are **fully available all the time**. |
41 |
50 |
42 You are do not need to unapply and apply patche to access various part of you |
51 You are do not need to unapply and apply patche to access various part of you |
43 history. |
52 history. |
44 |
53 |
45 * Use **plain changeset** only. Evole create and exchange real changeset only. |
54 * Use **plain changeset** only. |
|
55 |
|
56 Evolve create and exchange real changeset only, not patches. |
46 Mutable history can be used in all usual operation 'pull, push, log, diff …) |
57 Mutable history can be used in all usual operation 'pull, push, log, diff …) |
47 |
58 |
48 * Allow **sharing and collaboration** mutable history without fear of duplicate. |
59 * Allow **sharing and collaboration** mutable history without fear of duplicate. |
49 (thanks to obsolete marker). |
60 (thanks to obsolete marker). |
50 |
61 |
53 .. warning:: The evolve extention and the obsolete marker are at an experimental |
64 .. warning:: The evolve extention and the obsolete marker are at an experimental |
54 stage. While using obsolet you'll likely be exposed to complexe |
65 stage. While using obsolet you'll likely be exposed to complexe |
55 implication of the **obsolete marker** concept. I do not recommend |
66 implication of the **obsolete marker** concept. I do not recommend |
56 non power user to test this at this stage. |
67 non power user to test this at this stage. |
57 |
68 |
|
69 XXX make sure to read the XXX section before using it. |
|
70 |
58 Production ready version should hide such details to normal user. |
71 Production ready version should hide such details to normal user. |
59 |
72 |
60 To enable the evolve extension use:: |
73 To enable the evolve extension use:: |
61 |
74 |
62 $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/mutable-history/ |
75 $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/mutable-history/ |
63 $ mutable-history/enable.sh >> ~/.hgrc |
76 $ mutable-history/enable.sh >> ~/.hgrc |
64 |
77 |
65 You will probably want to use the associated version of hgview (QT viewer |
78 You will probably want to use the associated version of hgview (qt viewer |
66 only). :: |
79 recommended). :: |
67 |
80 |
68 $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/hgview/ |
81 $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/hgview/ |
69 $ cd hgview |
82 $ cd hgview |
70 $ python setup.py install --user |
83 $ python setup.py install --user |
71 |
84 |
|
85 works with mercurial 2.1 and 2.2 (recommended) |
72 |
86 |
73 --- |
87 --- |
74 |
88 |
75 For more information see documents below |
89 For more information see documents below: |
76 |
90 |
77 .. toctree:: |
91 .. toctree:: |
78 :maxdepth: 2 |
92 :maxdepth: 2 |
79 |
93 |
80 tutorial |
94 tutorial |
117 |
131 |
118 |
132 |
119 |
133 |
120 |
134 |
121 |
135 |
122 Know canveas |
136 Known limitation and bug |
123 ================================= |
137 ================================= |
124 |
138 |
125 Here is a list of know issue that will be fixed later: |
139 Here is a list of know issue that will be fixed later: |
126 |
140 |
127 * Unstable changeset turns secret. |
|
128 |
141 |
129 * ``hg stabilize`` does not handle conflict. |
|
130 |
142 |
131 * Mercurial think you are pushing additional heads even when the new head |
143 * ``hg stabilize`` does not handle merge conflict. |
132 obsolete another one. You have to use hg push -f more than necessary. |
144 |
|
145 You must fallback to graft or rebase when that happen. |
|
146 |
|
147 * rewritinf conflict are not detected yet``hg stabilize`` does not handle them. |
133 |
148 |
134 * ``hg update`` can move an obsolete parent |
149 * ``hg update`` can move an obsolete parent |
135 |
150 |
136 * you need to provideto graft --continue -O if you started you graft using -O. |
151 * you need to provide to `graft --continue -O` if you started you graft using `-O`. |
137 |
|
138 * hg graphlog show extinct changeset |
|
139 |
|
140 * hg heads show extinct changeset |
|
141 |
152 |
142 * hg merge considered extinct head as valid target. requiring you to manually |
153 * hg merge considered extinct head as valid target. requiring you to manually |
143 specify target all the time. |
154 specify target all the time. |
144 |
155 |
145 * obsolete relation exchange crash (as in traceback) on static http repo. |
156 * obsolete relation exchange crash (as in traceback) on static http repo. |
|
157 |
|
158 * Extinct changeset are turned secret by various commands. |
|
159 |
|
160 * Extinct changesets are hidden using the *hidden* feature of mercurial only |
|
161 supported by a few commands. |
|
162 |
|
163 Only ``hg log``, ``hgview`` and `hg glog` (2.2 only) support it. ``hg head`` or other visual viewer don't. |
|
164 |
|
165 * hg heads show extinct changeset |
|
166 |
|
167 Fixed in 2.2 |
|
168 --------------------------------- |
|
169 |
|
170 * hg graphlog show extinct changeset |
|
171 |
|
172 * Mercurial 2.1 think you are pushing additional heads even when the new head |
|
173 obsolete another one. You have to use hg push -f more than necessary. |
146 |
174 |
147 |
175 |
148 |
176 |
149 |
177 |
150 |
178 |