* Messing with the VC history @ 2014-11-16 6:17 Óscar Fuentes 2014-11-16 8:19 ` Achim Gratz 2014-11-16 15:24 ` Eli Zaretskii 0 siblings, 2 replies; 23+ messages in thread From: Óscar Fuentes @ 2014-11-16 6:17 UTC (permalink / raw) To: emacs-devel To welcome my first commit to Emacs, some people complicated the VC history with unnecessary noise burying the happy event into a merge-fest. This is my guess about what happened: In d409545 I pushed my change to master. In 9075fcc Stefan merged emacs-24 into his local `master' branch but... when he tried to push the merge it was rejected because of my change. He proceeded to pull, a conflict was found on a Changelog file (of course!) and he resolved it, which created a merge (1a71302). Stefan pushes both merges to master. Then on bc5d86f another actor enters (Jay Belanger) that pushes a merge to master (bc5d86f) with the commit message "Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs" I guess that this merge was generated by a `pull'. Now we have a merge (emacs-24 into master) within a merge (Stefan's) within a merge (Jay's). This can continue indefinitely, creating an spaghetti-like history graph that no ultra-wide monitor could display. IMO we should encourage people to use fetch+rebase instead of `pull', reserving merges for logically-related changes that comprise multiple commits. (I'll not dare to ask why, mysteriously, the emacs-diffs mailing list abstained from mentioning my commit.) ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 6:17 Messing with the VC history Óscar Fuentes @ 2014-11-16 8:19 ` Achim Gratz 2014-11-16 15:25 ` Eli Zaretskii 2014-11-16 15:24 ` Eli Zaretskii 1 sibling, 1 reply; 23+ messages in thread From: Achim Gratz @ 2014-11-16 8:19 UTC (permalink / raw) To: emacs-devel Óscar Fuentes writes: > IMO we should encourage people to use fetch+rebase instead of `pull', > reserving merges for logically-related changes that comprise multiple > commits. ...or configure Git to have "git pull" do exactly that, at least for the branches that are going upstream. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Samples for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldSamplesExtra ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 8:19 ` Achim Gratz @ 2014-11-16 15:25 ` Eli Zaretskii 2014-11-16 16:00 ` David Engster 2014-11-16 16:33 ` Achim Gratz 0 siblings, 2 replies; 23+ messages in thread From: Eli Zaretskii @ 2014-11-16 15:25 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-devel > From: Achim Gratz <Stromeko@nexgo.de> > Date: Sun, 16 Nov 2014 09:19:12 +0100 > > Óscar Fuentes writes: > > IMO we should encourage people to use fetch+rebase instead of `pull', > > reserving merges for logically-related changes that comprise multiple > > commits. > > ...or configure Git to have "git pull" do exactly that, at least for the > branches that are going upstream. What about "pull --rebase=preserve"? It sounds like a less radical option, did I miss something? ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 15:25 ` Eli Zaretskii @ 2014-11-16 16:00 ` David Engster 2014-11-17 16:48 ` Eli Zaretskii 2014-11-16 16:33 ` Achim Gratz 1 sibling, 1 reply; 23+ messages in thread From: David Engster @ 2014-11-16 16:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Achim Gratz, emacs-devel Eli Zaretskii writes: >> From: Achim Gratz <Stromeko@nexgo.de> >> Date: Sun, 16 Nov 2014 09:19:12 +0100 >> > >> Óscar Fuentes writes: >> > IMO we should encourage people to use fetch+rebase instead of `pull', >> > reserving merges for logically-related changes that comprise multiple >> > commits. >> >> ...or configure Git to have "git pull" do exactly that, at least for the >> branches that are going upstream. > > What about "pull --rebase=preserve"? It sounds like a less radical > option, did I miss something? That option only exists since Git 1.8.5 or so. But I agree that it should be used if available, as to not accidentally flatten local merges you want to keep (you can make it default by setting the pull.rebase option to 'preserve' - again something that really should be the default). -David ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 16:00 ` David Engster @ 2014-11-17 16:48 ` Eli Zaretskii 0 siblings, 0 replies; 23+ messages in thread From: Eli Zaretskii @ 2014-11-17 16:48 UTC (permalink / raw) To: David Engster; +Cc: Stromeko, emacs-devel > From: David Engster <deng@randomsample.de> > Cc: Achim Gratz <Stromeko@nexgo.de>, emacs-devel@gnu.org > Date: Sun, 16 Nov 2014 17:00:20 +0100 > > > What about "pull --rebase=preserve"? It sounds like a less radical > > option, did I miss something? > > That option only exists since Git 1.8.5 or so. But I agree that it > should be used if available, as to not accidentally flatten local merges > you want to keep (you can make it default by setting the pull.rebase > option to 'preserve' - again something that really should be the > default). Btw, those who configure Git to rebase on pull might also wish to set rebase.stat = true, so the diffstat output is still shown when they pull. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 15:25 ` Eli Zaretskii 2014-11-16 16:00 ` David Engster @ 2014-11-16 16:33 ` Achim Gratz 2014-11-16 18:13 ` Eli Zaretskii 1 sibling, 1 reply; 23+ messages in thread From: Achim Gratz @ 2014-11-16 16:33 UTC (permalink / raw) To: emacs-devel Eli Zaretskii writes: >> ...or configure Git to have "git pull" do exactly that, at least for the >> branches that are going upstream. > > What about "pull --rebase=preserve"? It sounds like a less radical > option, did I miss something? Yes, you can do that if you use an up-to-date Git version. Not everyone involved here is using a new enough version to use the "preserve" option (and yes, you can configure that on a global, local or branch-by-branch basis too) I have gathered from the discussions so far. For the usual "let's fix this thing and get it upstream" type of work it shouldn't matter. Otherwise you'll have to remember to configure your feature branches differently if they contain merges (local merges that is, because merges with upstream wouldn't enter into the branch if you rebase by default). For longer term work that's kept in feature branches I prefer to rebase on top of upstream rather than merge and usually do a full rewrite before pushing it upstream as well. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptation for Waldorf microQ V2.22R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 16:33 ` Achim Gratz @ 2014-11-16 18:13 ` Eli Zaretskii 2014-11-22 10:04 ` Steinar Bang 0 siblings, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2014-11-16 18:13 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-devel > From: Achim Gratz <Stromeko@nexgo.de> > Date: Sun, 16 Nov 2014 17:33:32 +0100 > > > What about "pull --rebase=preserve"? It sounds like a less radical > > option, did I miss something? > > For the usual "let's fix this thing and get it upstream" type of > work it shouldn't matter. Otherwise you'll have to remember to > configure your feature branches differently if they contain merges > (local merges that is, because merges with upstream wouldn't enter > into the branch if you rebase by default). Sorry, I'm not sure I follow: the pull.rebase = preserve setting is only for the "pull" command, right? It doesn't affect "merge" and commands that invoke "merge", like "cherry-pick", right? If so, why would I need to configure my feature branches differently, if I don't intend to pull into them from upstream? My workflow with feature branches is create the branch; do the work; when it's almost done, merge from master and test; then merge back into master and push. There's no pulling here except from upstream to master. > For longer term work that's kept in feature branches I prefer to > rebase on top of upstream rather than merge and usually do a full > rewrite before pushing it upstream as well. Well, I prefer merging instead, see above. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 18:13 ` Eli Zaretskii @ 2014-11-22 10:04 ` Steinar Bang 0 siblings, 0 replies; 23+ messages in thread From: Steinar Bang @ 2014-11-22 10:04 UTC (permalink / raw) To: emacs-devel >>>>> Eli Zaretskii <eliz@gnu.org>: > My workflow with feature branches is create the branch; do the work; > when it's almost done, merge from master and test; then merge back > into master and push. There's no pulling here except from upstream to > master. Note: This is a very good work pattern in git, and people should consider this rather than working directly on the tracking branch and rebasing on pull. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 6:17 Messing with the VC history Óscar Fuentes 2014-11-16 8:19 ` Achim Gratz @ 2014-11-16 15:24 ` Eli Zaretskii 2014-11-16 16:05 ` Óscar Fuentes 1 sibling, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2014-11-16 15:24 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel > From: Óscar Fuentes <ofv@wanadoo.es> > Date: Sun, 16 Nov 2014 07:17:05 +0100 > > To welcome my first commit to Emacs, some people complicated the VC > history with unnecessary noise burying the happy event into a > merge-fest. I see nothing terribly messy there. You will see very similar picture when someone merges their local feature branch, and then pushes upstream. Maybe you don't like merge-commits in general, but then it's a different discussion altogether. > IMO we should encourage people to use fetch+rebase instead of `pull', Why not "pull --rebase" instead? Or even tell them how to configure Git to do the "--rebase" part automatically? People shouldn't need to learn yet another command, just for that. > (I'll not dare to ask why, mysteriously, the emacs-diffs mailing list > abstained from mentioning my commit.) It didn't. It's just that this is your first time, and emacs-diffs is a moderated list, so I needed to approve your messages, just this once. Part of your welcome party, I guess. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 15:24 ` Eli Zaretskii @ 2014-11-16 16:05 ` Óscar Fuentes 2014-11-16 16:21 ` Eli Zaretskii 2014-11-16 23:33 ` Stephen J. Turnbull 0 siblings, 2 replies; 23+ messages in thread From: Óscar Fuentes @ 2014-11-16 16:05 UTC (permalink / raw) To: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Óscar Fuentes <ofv@wanadoo.es> >> Date: Sun, 16 Nov 2014 07:17:05 +0100 >> >> To welcome my first commit to Emacs, some people complicated the VC >> history with unnecessary noise burying the happy event into a >> merge-fest. > > I see nothing terribly messy there. You will see very similar picture > when someone merges their local feature branch, and then pushes > upstream. That's not the same at all. Feature branches and incorporating changes from other public development branches *shall* be merged. What I'm describing is an scenario where merges are created just because someone pushed changes since your last `pull'. Apart from the noise on the VC history, this procedure has a recursive nature: A tries to push but he can't because there are new commits on the remote branch; then he pulls (+merges) and pushes. Meanwhile, B was hacking and now tries to push, but he can't because the changes pushed by A, so he pulls (+merges). Then C (or A again) tries to push... A single hacker can create multiple merges just to commit one change: it pulls and finds conflicts; he resolves them (a merge is created) and tries to push, but meanwhile others pushed their changes, so he pulls again. He now has a merge within a merge just to push one patch. The result is an entangled DAG that makes very difficult and unpleasant to read the VC history. > Maybe you don't like merge-commits in general, but then it's a > different discussion altogether. I don't like merge commits that add nothing but noise and confussion to the VC history. >> IMO we should encourage people to use fetch+rebase instead of `pull', > > Why not "pull --rebase" instead? Because people here work with at least two branches. "pull --rebase" pulls from all remote branches, but only rebases the branch you are working on (let's say `master'). So, when you switch to other branch (`emacs-24') you must remember that there are changes not yet incorporated into your emacs-24 checkout. Not a big deal, but IMO it is a good thing to have an idea of what you are going to incorporate into your local branch. With the right tool (Magit, for instance) fetch+rebase is faster than the command line (just type ffR) and you see at all times your changes, the fetched commits, the rebase status, etc. > Or even tell them how to configure > Git to do the "--rebase" part automatically? People shouldn't need to > learn yet another command, just for that. > >> (I'll not dare to ask why, mysteriously, the emacs-diffs mailing list >> abstained from mentioning my commit.) > > It didn't. It's just that this is your first time, and emacs-diffs is > a moderated list, so I needed to approve your messages, just this > once. Part of your welcome party, I guess. I feel so especial today. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 16:05 ` Óscar Fuentes @ 2014-11-16 16:21 ` Eli Zaretskii 2014-11-16 23:33 ` Stephen J. Turnbull 1 sibling, 0 replies; 23+ messages in thread From: Eli Zaretskii @ 2014-11-16 16:21 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel > From: Óscar Fuentes <ofv@wanadoo.es> > Date: Sun, 16 Nov 2014 17:05:28 +0100 > > >> To welcome my first commit to Emacs, some people complicated the VC > >> history with unnecessary noise burying the happy event into a > >> merge-fest. > > > > I see nothing terribly messy there. You will see very similar picture > > when someone merges their local feature branch, and then pushes > > upstream. > > That's not the same at all. Feature branches and incorporating changes > from other public development branches *shall* be merged. What I'm > describing is an scenario where merges are created just because someone > pushed changes since your last `pull'. But that's Git's default behavior: "merge" commits. So when Stefan merged from the branch, Git made a merge-commit, producing the same effect as if Stefan were to merge his local feature branch. What can we do if the tool behaves like that? > Apart from the noise on the VC history, this procedure has a > recursive nature: A tries to push but he can't because there are new > commits on the remote branch; then he pulls (+merges) and > pushes. Meanwhile, B was hacking and now tries to push, but he can't > because the changes pushed by A, so he pulls (+merges). Then C (or > A again) tries to push... Yes, but (a) this danger existed with bzr as well, and (b) the race you describe is in practice very rare, so the problem normally doesn't happen, and having it here and there is not different from local merges. > > Maybe you don't like merge-commits in general, but then it's a > > different discussion altogether. > > I don't like merge commits that add nothing but noise and confussion to > the VC history. I didn't become confused when I looked at that part of the graph. > >> IMO we should encourage people to use fetch+rebase instead of `pull', > > > > Why not "pull --rebase" instead? > > Because people here work with at least two branches. Who does? The recommendation is not to do that, because master and the release branch diverge very quickly, so switching branches will almost always require a full bootstrap. You are, of course, free to do that if you like, but then you probably know what you are doing anyway. In contrast, forcing the (at least somewhat) confused majority to have yet another command in their everyday workflow means more pain for them. > With the right tool (Magit, for instance) fetch+rebase is faster than > the command line (just type ffR) and you see at all times your changes, > the fetched commits, the rebase status, etc. We are talking about CLI commands here. Emacs front ends are a separate matter, they can simply automate everything, so people will not have to remember the Git commands that run under the hood. That's not the issue at hand. > >> (I'll not dare to ask why, mysteriously, the emacs-diffs mailing list > >> abstained from mentioning my commit.) > > > > It didn't. It's just that this is your first time, and emacs-diffs is > > a moderated list, so I needed to approve your messages, just this > > once. Part of your welcome party, I guess. > > I feel so especial today. You are. Welcome on board. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 16:05 ` Óscar Fuentes 2014-11-16 16:21 ` Eli Zaretskii @ 2014-11-16 23:33 ` Stephen J. Turnbull 2014-11-17 1:31 ` John Yates 2014-11-17 16:42 ` Eli Zaretskii 1 sibling, 2 replies; 23+ messages in thread From: Stephen J. Turnbull @ 2014-11-16 23:33 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Óscar Fuentes writes: > What I'm describing is an scenario where merges are created just > because someone pushed changes since your last `pull'. Apart from > the noise on the VC history, this procedure has a recursive nature: You can't win this one, Óscar. Many Emacs developers, including several frequent committers, are uninterested in learning enough about VCS to deal with these issues. Some dislike rebasing in principle or because doing it properly (as they understand it) involves running tests on all rebased commits. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 23:33 ` Stephen J. Turnbull @ 2014-11-17 1:31 ` John Yates 2014-11-17 3:23 ` Stephen J. Turnbull 2014-11-17 16:42 ` Eli Zaretskii 1 sibling, 1 reply; 23+ messages in thread From: John Yates @ 2014-11-17 1:31 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: Óscar Fuentes, Emacs developers [-- Attachment #1: Type: text/plain, Size: 468 bytes --] On Sun, Nov 16, 2014 at 6:33 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > Many Emacs developers, including > several frequent committers, are uninterested in learning enough about > VCS to deal with these issues. Some dislike rebasing in principle or > because doing it properly (as they understand it) involves running > tests on all rebased commits. > Are they under the impression that by contrast a merge absolves them of any need to run tests? /john [-- Attachment #2: Type: text/html, Size: 831 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-17 1:31 ` John Yates @ 2014-11-17 3:23 ` Stephen J. Turnbull 2014-11-18 7:18 ` Lars Brinkhoff 0 siblings, 1 reply; 23+ messages in thread From: Stephen J. Turnbull @ 2014-11-17 3:23 UTC (permalink / raw) To: John Yates; +Cc: Óscar Fuentes, Emacs developers John Yates writes: > On Sun, Nov 16, 2014 at 6:33 PM, Stephen J. Turnbull <stephen@xemacs.org> > wrote: > > Some dislike rebasing in principle or because doing it properly > > (as they understand it) involves running tests on all rebased > > commits. > > Are they under the impression that by contrast a merge > absolves them of any need to run tests? Of course not! They know for a fact that they already ran them on the revisions in their feature branch and on the merged code, and that the rebased revisions will be *different* from the revisions they ran tests on. They object to running the tests *twice* when once should do. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-17 3:23 ` Stephen J. Turnbull @ 2014-11-18 7:18 ` Lars Brinkhoff 2014-11-18 7:42 ` David Kastrup 2014-11-18 7:53 ` Stephen J. Turnbull 0 siblings, 2 replies; 23+ messages in thread From: Lars Brinkhoff @ 2014-11-18 7:18 UTC (permalink / raw) To: emacs-devel Stephen J. Turnbull wrote: > John Yates wrote: > > Stephen J. Turnbull wrote: > > > Some dislike rebasing in principle or because doing it properly > > > (as they understand it) involves running tests on all rebased > > > commits. > > > > Are they under the impression that by contrast a merge absolves > > them of any need to run tests? > > Of course not! They know for a fact that they already ran them on > the revisions in their feature branch and on the merged code, and > that the rebased revisions will be *different* from the revisions > they ran tests on. They object to running the tests *twice* when > once should do. I've met some of those. Is there a counterargument? ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 7:18 ` Lars Brinkhoff @ 2014-11-18 7:42 ` David Kastrup 2014-11-18 7:53 ` Stephen J. Turnbull 1 sibling, 0 replies; 23+ messages in thread From: David Kastrup @ 2014-11-18 7:42 UTC (permalink / raw) To: emacs-devel Lars Brinkhoff <lars@nocrew.org> writes: > Stephen J. Turnbull wrote: >> John Yates wrote: >> > Stephen J. Turnbull wrote: >> > > Some dislike rebasing in principle or because doing it properly >> > > (as they understand it) involves running tests on all rebased >> > > commits. >> > >> > Are they under the impression that by contrast a merge absolves >> > them of any need to run tests? >> >> Of course not! They know for a fact that they already ran them on >> the revisions in their feature branch and on the merged code, and >> that the rebased revisions will be *different* from the revisions >> they ran tests on. They object to running the tests *twice* when >> once should do. > > I've met some of those. Is there a counterargument? After having repeated moments of tension with a non-workable master, LilyPond moved to a different setup. "Check that everything builds, including the documentation" takes more than an hour on my system, a moderately up-to-date dual processor machine. We have contributors with considerably less machine power. We have a few volunteers with considerably more. Prospective patches are sent to a tracker. Volunteers regularly pick them up with an automated procedure, run all regtests and view the flagged visual differences in the regression tests and logs and (weighted and thresholded) memory usage statistics. The last step of viewing the differences is manual and making a comment/judgment is manual, the rest automatic. So all patches have seen testing against _some_ version of LilyPond. When committing any commit, it is committed to a branch called "staging". NO HUMAN COMMITS TO MASTER. staging is picked up regularly by an automated process, compiled, regtest-checked (without visual comparison), documentation and translations built (includes all the web sites). If compilation completes successfully, the result is pushed to master. This automated process can fail for a number of reasons. Mails get sent out without stopping the scheduled attempts. Those reasons are: failure (of course). master cannot be fast-forwarded to staging (some human pushed to master, or a staging test run on another machine with a conflicting staging branch completed first): may need manual fixing the tested staging is not strictly behind the upstream staging at the time testing completes: that means that somebody cleared staging and replaced it by something else while testing progressed: an emergency stop if you find you pushed something bad and noticed immediately: in that case resetting staging is enough to stop the automated run from pushing the no-longer-accepted version of staging even if it tests fine. The "who messed up master?" panics have gone. Actually, the frequency of messups overall has not been a lot recently, but "staging is messed up" is a comparatively harmless problem. It halts the queue. It's only messy when you have a lot of different contributions queued in staging and one is bad. However, the frequency of the automated runs make this unlikely, and you can always wait for the queue to clear a bit if you are not really sure your change is good and want to save others from having to recommit and/or substitute a rebased version of staging with your bad commits removed. -- David Kastrup ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 7:18 ` Lars Brinkhoff 2014-11-18 7:42 ` David Kastrup @ 2014-11-18 7:53 ` Stephen J. Turnbull 2014-11-18 8:41 ` David Kastrup 2014-11-18 16:47 ` Barry Warsaw 1 sibling, 2 replies; 23+ messages in thread From: Stephen J. Turnbull @ 2014-11-18 7:53 UTC (permalink / raw) To: Lars Brinkhoff; +Cc: emacs-devel Lars Brinkhoff writes: > Stephen J. Turnbull wrote: > > John Yates wrote: > > > Are they under the impression that by contrast a merge absolves > > > them of any need to run tests? > > > > Of course not! They know for a fact that they already ran them on > > the revisions in their feature branch and on the merged code, and > > that the rebased revisions will be *different* from the revisions > > they ran tests on. They object to running the tests *twice* when > > once should do. > > I've met some of those. Is there a counterargument? (I'm not sure what you're asking. HTH) It depends on the purpose of the tests. - If the purpose of the tests is to ensure that *released* code is "clean", then you only need to test the merge version. No problem, rebase and test when you feel like it. :-) - If the purpose of the tests is to ensure that each revision in the DAG is "clean" (eg, in order to make bisect as accurate as possible), then it substantially reduces time and annoyance for the the developer to test each change in the feature branch then *merge* and test the merge commit. This case basically comes down to a vote between the "pretty DAG" folks and the TDD crowd.[1] - If the purpose of the tests is to ensure that each commit in the DAG is "clean" in the context of the latest revision before yours, then it makes sense to rebase and test each revision in the rebased branch. You only do as much testing on the feature branch as gives you confidence you won't have to do much debugging and repair for rebased commits. In this case there is no conflict between rebasing and thorough testing. Personally, I'm kinda OCD and tend toward Type C most of the time. (I've also read and understand the git documentation. You see my problem, I think. :-) I find bisect very useful on occasion, so would rule out Type A if at all possible. But I find Type B plausible, and think it's a matter of taste. Footnotes: [1] However, some people think a mainline with only merge commits on it is pretty, and they just oppose rebasing on principle. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 7:53 ` Stephen J. Turnbull @ 2014-11-18 8:41 ` David Kastrup 2014-11-18 16:47 ` Barry Warsaw 1 sibling, 0 replies; 23+ messages in thread From: David Kastrup @ 2014-11-18 8:41 UTC (permalink / raw) To: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > [1] However, some people think a mainline with only merge commits on > it is pretty, and they just oppose rebasing on principle. "Beauty" as an underlying concept of "pretty" usually involves perfection, and perfection in technical settings implies everything having a purpose. A merge commit is a branch that starts off somewhere and ends somewhere. If there is no point to where the branch starts off, the branch start is ugly, never mind whether you consider a merge in itself pretty. An example for a merge commit in a pretty-based development environment would be <URL:https://code.google.com/p/lilypond/issues/detail?id=4097#c14>. A merge commit is used because not all intermediate states in the logically separate commits may be compilable (either they are known to be uncompilable, or the jury is out on them). Even through the commit sequence itself has been "prettified" by structuring it into separate commits doing one logical task, a merge commit is warranted in order not to cause bisection problems. The starting point of the branching point is not arbitrary: it is the parent of the merge commit. Such an incestuous merge has to be ordered explicitly using the --no-ff flag to merge. -- David Kastrup ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 7:53 ` Stephen J. Turnbull 2014-11-18 8:41 ` David Kastrup @ 2014-11-18 16:47 ` Barry Warsaw 2014-11-18 17:06 ` Andreas Schwab 1 sibling, 1 reply; 23+ messages in thread From: Barry Warsaw @ 2014-11-18 16:47 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 666 bytes --] On Nov 18, 2014, at 04:53 PM, Stephen J. Turnbull wrote: >I find bisect very useful on occasion, so would rule out Type A if at all >possible. But I find Type B plausible, and think it's a matter of taste. bisect would be more useful, IMHO, if it followed first-parents by default. IOW, when merging a feature branch into "mainline", I don't care whether intermediate commits on the feature branch don't pass all their tests. I *do* care that every commit on "mainline" passes all their tests. >[1] However, some people think a mainline with only merge commits on >it is pretty, and they just oppose rebasing on principle. \o Cheers, -Barry [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 16:47 ` Barry Warsaw @ 2014-11-18 17:06 ` Andreas Schwab 2014-11-18 22:30 ` Stephen J. Turnbull 0 siblings, 1 reply; 23+ messages in thread From: Andreas Schwab @ 2014-11-18 17:06 UTC (permalink / raw) To: Barry Warsaw; +Cc: emacs-devel Barry Warsaw <barry@python.org> writes: > bisect would be more useful, IMHO, if it followed first-parents by default. Bisecting follows whatever you tell it about the good/bad state of branches. Andreas. -- Andreas Schwab, SUSE Labs, schwab@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 17:06 ` Andreas Schwab @ 2014-11-18 22:30 ` Stephen J. Turnbull 2014-11-19 2:34 ` Stefan Monnier 0 siblings, 1 reply; 23+ messages in thread From: Stephen J. Turnbull @ 2014-11-18 22:30 UTC (permalink / raw) To: Andreas Schwab; +Cc: Barry Warsaw, emacs-devel Andreas Schwab writes: > Barry Warsaw <barry@python.org> writes: > > > bisect would be more useful, IMHO, if it followed first-parents by default. > > Bisecting follows whatever you tell it about the good/bad state of > branches. No, bisecting has a choice of which of several paths to follow through a DAG between a branch point and a merge. Telling it "bisect between node and merge" doesn't help it make that choice. I don't know how git chooses, but Barry is saying that in a workflow where all mainline commits are either merge commits (for multiple- commit "complex feature" branches) or one-off (for "simple bugfix" commits), the bisect algorithm should follow the mainline (ie, first parents) and completely ignore off-mainline "component of feature" commits. I suspect that is in fact what git does, but don't have time to check. ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-18 22:30 ` Stephen J. Turnbull @ 2014-11-19 2:34 ` Stefan Monnier 0 siblings, 0 replies; 23+ messages in thread From: Stefan Monnier @ 2014-11-19 2:34 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: Andreas Schwab, Barry Warsaw, emacs-devel > I don't know how git chooses, I'd expect it follows (one of) the "shortest path". Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Messing with the VC history 2014-11-16 23:33 ` Stephen J. Turnbull 2014-11-17 1:31 ` John Yates @ 2014-11-17 16:42 ` Eli Zaretskii 1 sibling, 0 replies; 23+ messages in thread From: Eli Zaretskii @ 2014-11-17 16:42 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: ofv, emacs-devel > From: "Stephen J. Turnbull" <stephen@xemacs.org> > Date: Mon, 17 Nov 2014 08:33:14 +0900 > Cc: emacs-devel@gnu.org > > You can't win this one, Óscar. Many Emacs developers, including > several frequent committers, are uninterested in learning enough about > VCS to deal with these issues. Some dislike rebasing in principle or > because doing it properly (as they understand it) involves running > tests on all rebased commits. I didn't want to start a "to rebase or not to rebase" argument. Taken at face value, neither was Óscar's original gripe. So I pointed out that a situation similar to what he complained about happens from time to time in Emacs, and is IMO no catastrophe. As for the rebase issue, the pros and cons are well known, and interested parties can find good writeups on the Internet with sound arguments either way. We won't come up with anything new about that. People take sides according to their personal preferences and work habits, and that is okay as long as Emacs, unlike some other projects, allows each one to do what they like in this department. I see no reason to argue about personal preferences, let alone accuse the opponents of being unwilling to learn. ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2014-11-22 10:04 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-11-16 6:17 Messing with the VC history Óscar Fuentes 2014-11-16 8:19 ` Achim Gratz 2014-11-16 15:25 ` Eli Zaretskii 2014-11-16 16:00 ` David Engster 2014-11-17 16:48 ` Eli Zaretskii 2014-11-16 16:33 ` Achim Gratz 2014-11-16 18:13 ` Eli Zaretskii 2014-11-22 10:04 ` Steinar Bang 2014-11-16 15:24 ` Eli Zaretskii 2014-11-16 16:05 ` Óscar Fuentes 2014-11-16 16:21 ` Eli Zaretskii 2014-11-16 23:33 ` Stephen J. Turnbull 2014-11-17 1:31 ` John Yates 2014-11-17 3:23 ` Stephen J. Turnbull 2014-11-18 7:18 ` Lars Brinkhoff 2014-11-18 7:42 ` David Kastrup 2014-11-18 7:53 ` Stephen J. Turnbull 2014-11-18 8:41 ` David Kastrup 2014-11-18 16:47 ` Barry Warsaw 2014-11-18 17:06 ` Andreas Schwab 2014-11-18 22:30 ` Stephen J. Turnbull 2014-11-19 2:34 ` Stefan Monnier 2014-11-17 16:42 ` Eli Zaretskii
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.