"Georg S. Weber" <georgswe...@googlemail.com> writes:
> On 14 Mrz., 20:43, Jeroen Demeyer <jdeme...@cage.ugent.be> wrote:
>> On 2012-03-14 19:20, Keshav Kini wrote:> If we switch to git, as I 
>> understand we eventually will, patches
>> > (commits) made from an older dev release will be considered to "not
>> > apply" (not be mergeable) a lot more often than merely the cases when
>> > other people have meanwhile touched the same files - in fact, *always* -
>> > unless we make development releases based on their predecessors.
>>
>> If this is true, then I don't want to switch to git.
>
> (... scatches his head ...)
> If this was true, how could Torvalds and coworkers possibly use "git"
> as a (distributed!) version control system tool for developing the
> Linux kernel?

... what? I made a very specific statement about Sage development.
Kernel development has nothing to do with it. In particular, I
*guarantee* you that the kernel devs do not rewrite published history in
their public tree, while we do so left and right, even when it's not
even necessary (i.e. when no patches even need to be backed out)!

In fact, here's `a quote`_ from the Linux kernel developer's guide:

    if you rewrite history which other developers have pulled into their
    repositories, you will make life much more difficult for those
    developers. So a simple rule of thumb applies here: history which
    has been exported to others should generally be seen as immutable
    thereafter.

And we not only mutate history that has been exported to others, but
history that has been published as an official beta version of Sage!!

.. _a quote: 
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/development-process/7.AdvancedTopics;h=26dc3fa196e46fc9a1f8ef9f03e303c409e5b8b2;hb=HEAD#l80

To explain what I meant in more technical detail:

If we switch to git, commits made on an older dev release will not be
mergeable into the new dev release unless the new dev release is based
on (i.e. consists of a superset of the commits present in) the old dev
release.

(In the below, single lines indicate history private to a single
developer, and double lines indicate history published in our official
repository.)


How it would work if new dev releases were based on old dev releases
--------------------------------------------------------------------

1) A dev release is made, incorporating commits A and B.

    o == A == B
              ^
              1

2) A developer commits some changes on top of the release.

    o == A == B -- X
              ^
              1

3) Another release is made, incorporating commit C.

                X
               /
    o == A == B == C
              ^    ^
              1    2

4) The developer updates his changes with what has changed in the new
release. He then makes some fixes to make his code compatible with the
new release.

                X -- M -- Y
               /    /
    o == A == B == C
              ^    ^
              1    2

5) Another release is made, incorporating the developer's changes (X, M,
and Y), but first backing out the changes made in A, with commit D. This
release now incorporates X, M, Y, D, and E, on top of what was in the
previous release.

                X == M === Y
               //   //     \\
    o == A == B == C == D == E
              ^    ^         ^
              1    2         3


How it would work given current practices
-----------------------------------------

1) A release is made, incorporating commits A and B.

    o == A == B
              ^
              1

2) A developer commits some changes on top of the release.

    o == A == B -- X
              ^
              1

3) Another release is made, incorporating commit C but also duplicating
commits A and B. Notice that previously public, global commits have now
become private, local commits (the duplicated A and B).

      A -- B -- X
     /
    o == A == B == C
              ^    ^
              1    2

4) The developer updates his changes with what has changed in the new
release. He makes some fixes to make his code compatible with the new
release.

      A -- B -- X -- M -- Y
     /              /
    o == A == B == C
              ^    ^
              1    2

5) Another release is made, incorporating the developer's changes (X, M,
and Y), but first backing out the changes made in A, with commit D.
Pulling in the developer's changes also pulls in the two old copies of A
and B and one copy of C from the previous two dev releases. This release
now incorporates X, M, Y, D, E, old A, old B, old C, older A, and older
B on top of what was in the previous release.

        A == B == X == M == Y
       //             //     \\
      /=== A == B == C        \\
     //                        \\
    o == A == B == C == D ===== E
              ^    ^            ^
              1    2            3

What is wrong with this picture:

* A and B now in the history in triplicate, and C in duplicate. This is
  confusing and a waste of space, not to mention not indicative of what
  actually happened (nobody actually independently committed A and B
  three times or C twice).

* Even more importantly, while A was backed out by D, it is reintroduced
  by the vestigial copies of A which came from the first and second dev
  releases and are sitting in our developer's branch. This remains true
  even if the third release simply omitted A, as Jeroen is currently
  doing in such cases:

        A == B == X == M == Y
       //             //     \\
      /=== A == B == C        \\
     //                        \\
    o ======= B == C ========== E
              ^    ^            ^
              1    2            3

To avoid this happening requires manual intervention (in particular,
rebasing) every time a new dev release is made. This is what I mean when
I say that the developer's changes are not mergeable unless we base new
development releases on old ones.

> To my understanding they have "lieutenants" responsible for different
> areas maintaining their own kernel tree each, and Linus Torvalds then
> pulls in the requested changes from each one. Or not. Or maybe later,
> partly, etc.pp. This must be a highly non-linear process! And git was
> *designed and created* (by Linus Torvalds himself!) to support this as
> easily and smoothly as possible.

Why do you think I have anything against non-linear development? On the
contrary, I welcome it! I invite you to look at the history of any
recent version of the Sage library. There has not been a single merge
commit to the Sage library since June 2010! This is entirely the product
of the current cherry-picking style of release management which treats
the version control system as a changelog rather than as a repository of
development history.

I am very surprised that you bring up the kernel development model as
somehow being an argument *against* what I have said. I can only
conclude that I was not sufficiently clear in explaining what I meant.

> Keshav, might there be some misunderstanding on your side?

Of course there very well might be, but if so, I am still unable see
it...

> Please do not hesitate to continue to ask questions, I'll try to
> answer them. But please be aware that I left university over a decade
> ago and am working since then in the software business in projects
> that are at least an order of magnitude bigger than Sage, daily using
> tools like cvs (which is quickly fading out), subversion, Perforce,
> git. So I might have grown quite some blind spots :-)

Of the four version control systems you list, git is fundamentally
different from the other three, being a *distributed* version control
system. git is, however, flexible enough to be used as a centralized VCS
like the others. Maybe your experience with git is in this vein?

> Honestly, it didn't occur to me that you could believe the above (from
> which it seems quite a good part of your motivation comes to open this
> thread), until you wrote it explicitly down ...

I hope I have now demonstrated the point sufficiently that you can take
it as just that - a point, rather than a "belief". But in any case,
please also note that my earlier message, and other messages in this
thread, had other points than this one - this is just the one Jeroen
happened to respond to.

Please tell me if anything else about what I said, in my previous
post(s) or this one, is insufficiently clear - I hope the diagrams are
of some help! And of course I welcome comments about the other points I
have made as well.

-Keshav

----
Join us in #sagemath on irc.freenode.net !

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to