Fossil SCM

Minor editorial changes to rebaseharm.md, in an attempt to improve clarity and readability.

drh 2019-09-06 20:38 trunk
Commit 9b32c180eba0f4628c91cdff8da2f33e3b6b3055c9f3b62fbf30d775f80bbc1e
1 file changed +13 -12
+13 -12
--- www/rebaseharm.md
+++ www/rebaseharm.md
@@ -1,25 +1,25 @@
11
# Rebase Considered Harmful
22
3
-Fossil deliberately does not implement "rebase", because the original
3
+Fossil deliberately omits a "rebase" command, because the original
44
designer of Fossil (and author of this article) considers rebase to be
55
an anti-pattern to be avoided. This article attempts to
66
explain that point of view.
77
88
## 1.0 Rebasing is dangerous
99
10
-Everyone, even the most vocal advocates of rebase, agrees that rebase can
11
-cause problems when misused. All rebase documentation talks about the
12
-[golden rule of rebase][golden], that it should never be used on a public
10
+Most people, even strident advocates rebase, agree that rebase can
11
+cause problems when misused. Rebase documentation talks about the
12
+[golden rule of rebase][golden]: that it should never be used on a public
1313
branch. Horror stories of misused rebase abound, and the rebase
14
-documentation devotes considerable space to hints on how to recover from
15
-rebase errors and/or misuse.
14
+documentation devotes considerable space toward explaining how to
15
+recover from rebase errors and/or misuse.
1616
1717
Sometimes sharp and dangerous tools are justified,
1818
because they accomplish things that cannot be
19
-(easily) done otherwise. But rebase does not fall into that category.
20
-It provides no new capabilities, as we shall see in the next section:
19
+(easily) done otherwise. But rebase does not fall into that category,
20
+because rebase provides no new capabilities. To wit:
2121
2222
## 2.0 A rebase is just a merge with historical references omitted
2323
2424
A rebase is really nothing more than a merge (or a series of merges)
2525
that deliberately forgets one of the parents of each merge step.
@@ -45,11 +45,11 @@
4545
capabilities are weak and need active assistance from the user to
4646
keep things manageable.
4747
Surely a better approach is to record
4848
the complete ancestry of every check-in but then fix the tool to show
4949
a "clean" history in those instances where a simplified display is
50
-desirable and edifying, but retaining the option to show the real,
50
+desirable and edifying, but retain the option to show the real,
5151
complete, messy history for cases where detail and accuracy are more
5252
important.
5353
5454
So, another way of thinking about rebase is that it is a kind of
5555
merge that intentionally forgets some details in order to
@@ -114,12 +114,13 @@
114114
with collaborators. This is not good for product quality.
115115
116116
[Nagappan, et. al][nagappan] studied bugs in Windows Vista and found
117117
that best predictor of bugs is the distance on the org-chart between
118118
the stake-holders. Or, bugs are reduced when the engineers talk to
119
-one another. Similar finds arise in other disciplines. Keeping
120
-private branches is a key symptom of siloing.
119
+one another. Similar findings arise in other disciplines. Keeping
120
+private branches does not prove that developers are communicating
121
+insufficiently, but it is a key symptom that problem.
121122
122123
[Weinberg][weinberg] argues programming should be "egoless". That
123124
is to say, programmers should avoid linking their code with their sense of
124125
self, as that makes it more difficult for them to find and respond
125126
to bugs, and hence makes them less productive. Many developers are
@@ -218,11 +219,11 @@
218219
before it is committed to the blockchain
219220
220221
3. Cherry-pick merges are "safe" in the sense that they do not
221222
cause problems for collaborators if you do them on public branches.
222223
223
- 4. Cherry-picks preserve both the original and the revised check-ins,
224
+ 4. Cherry-picks keep both the original and the revised check-ins,
224225
so both timestamps are preserved.
225226
226227
## 8.0 Summary and conclusion
227228
228229
Rebasing is an anti-pattern. It is dishonest. It deliberately
229230
--- www/rebaseharm.md
+++ www/rebaseharm.md
@@ -1,25 +1,25 @@
1 # Rebase Considered Harmful
2
3 Fossil deliberately does not implement "rebase", because the original
4 designer of Fossil (and author of this article) considers rebase to be
5 an anti-pattern to be avoided. This article attempts to
6 explain that point of view.
7
8 ## 1.0 Rebasing is dangerous
9
10 Everyone, even the most vocal advocates of rebase, agrees that rebase can
11 cause problems when misused. All rebase documentation talks about the
12 [golden rule of rebase][golden], that it should never be used on a public
13 branch. Horror stories of misused rebase abound, and the rebase
14 documentation devotes considerable space to hints on how to recover from
15 rebase errors and/or misuse.
16
17 Sometimes sharp and dangerous tools are justified,
18 because they accomplish things that cannot be
19 (easily) done otherwise. But rebase does not fall into that category.
20 It provides no new capabilities, as we shall see in the next section:
21
22 ## 2.0 A rebase is just a merge with historical references omitted
23
24 A rebase is really nothing more than a merge (or a series of merges)
25 that deliberately forgets one of the parents of each merge step.
@@ -45,11 +45,11 @@
45 capabilities are weak and need active assistance from the user to
46 keep things manageable.
47 Surely a better approach is to record
48 the complete ancestry of every check-in but then fix the tool to show
49 a "clean" history in those instances where a simplified display is
50 desirable and edifying, but retaining the option to show the real,
51 complete, messy history for cases where detail and accuracy are more
52 important.
53
54 So, another way of thinking about rebase is that it is a kind of
55 merge that intentionally forgets some details in order to
@@ -114,12 +114,13 @@
114 with collaborators. This is not good for product quality.
115
116 [Nagappan, et. al][nagappan] studied bugs in Windows Vista and found
117 that best predictor of bugs is the distance on the org-chart between
118 the stake-holders. Or, bugs are reduced when the engineers talk to
119 one another. Similar finds arise in other disciplines. Keeping
120 private branches is a key symptom of siloing.
 
121
122 [Weinberg][weinberg] argues programming should be "egoless". That
123 is to say, programmers should avoid linking their code with their sense of
124 self, as that makes it more difficult for them to find and respond
125 to bugs, and hence makes them less productive. Many developers are
@@ -218,11 +219,11 @@
218 before it is committed to the blockchain
219
220 3. Cherry-pick merges are "safe" in the sense that they do not
221 cause problems for collaborators if you do them on public branches.
222
223 4. Cherry-picks preserve both the original and the revised check-ins,
224 so both timestamps are preserved.
225
226 ## 8.0 Summary and conclusion
227
228 Rebasing is an anti-pattern. It is dishonest. It deliberately
229
--- www/rebaseharm.md
+++ www/rebaseharm.md
@@ -1,25 +1,25 @@
1 # Rebase Considered Harmful
2
3 Fossil deliberately omits a "rebase" command, because the original
4 designer of Fossil (and author of this article) considers rebase to be
5 an anti-pattern to be avoided. This article attempts to
6 explain that point of view.
7
8 ## 1.0 Rebasing is dangerous
9
10 Most people, even strident advocates rebase, agree that rebase can
11 cause problems when misused. Rebase documentation talks about the
12 [golden rule of rebase][golden]: that it should never be used on a public
13 branch. Horror stories of misused rebase abound, and the rebase
14 documentation devotes considerable space toward explaining how to
15 recover from rebase errors and/or misuse.
16
17 Sometimes sharp and dangerous tools are justified,
18 because they accomplish things that cannot be
19 (easily) done otherwise. But rebase does not fall into that category,
20 because rebase provides no new capabilities. To wit:
21
22 ## 2.0 A rebase is just a merge with historical references omitted
23
24 A rebase is really nothing more than a merge (or a series of merges)
25 that deliberately forgets one of the parents of each merge step.
@@ -45,11 +45,11 @@
45 capabilities are weak and need active assistance from the user to
46 keep things manageable.
47 Surely a better approach is to record
48 the complete ancestry of every check-in but then fix the tool to show
49 a "clean" history in those instances where a simplified display is
50 desirable and edifying, but retain the option to show the real,
51 complete, messy history for cases where detail and accuracy are more
52 important.
53
54 So, another way of thinking about rebase is that it is a kind of
55 merge that intentionally forgets some details in order to
@@ -114,12 +114,13 @@
114 with collaborators. This is not good for product quality.
115
116 [Nagappan, et. al][nagappan] studied bugs in Windows Vista and found
117 that best predictor of bugs is the distance on the org-chart between
118 the stake-holders. Or, bugs are reduced when the engineers talk to
119 one another. Similar findings arise in other disciplines. Keeping
120 private branches does not prove that developers are communicating
121 insufficiently, but it is a key symptom that problem.
122
123 [Weinberg][weinberg] argues programming should be "egoless". That
124 is to say, programmers should avoid linking their code with their sense of
125 self, as that makes it more difficult for them to find and respond
126 to bugs, and hence makes them less productive. Many developers are
@@ -218,11 +219,11 @@
219 before it is committed to the blockchain
220
221 3. Cherry-pick merges are "safe" in the sense that they do not
222 cause problems for collaborators if you do them on public branches.
223
224 4. Cherry-picks keep both the original and the revised check-ins,
225 so both timestamps are preserved.
226
227 ## 8.0 Summary and conclusion
228
229 Rebasing is an anti-pattern. It is dishonest. It deliberately
230

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button