From: linux@horizon.com
To: git@vger.kernel.org
Cc: linux@horizon.com
Subject: Re: [ANNOUNCE] Git wiki
Date: 4 May 2006 20:56:59 -0400 [thread overview]
Message-ID: <20060505005659.9092.qmail@science.horizon.com> (raw)
Actually, AFAICT from looking at the mailing list history, it's not dirty
politics: the tie-breaker was the support and enthusiasm of the mercurial
developers. It passed with only minor comment on the git mailing list,
but it was a Big Thing to the hg folks.
There are ups and downs. OpenSolaris is definitely the big fish in
the mercurial pond (that wasn't *meant* to sound like a recipe for
heavy metal toxicity), and will get lots of attention, but git has more
real-world experience. The big fish in the git pond is Linus and Linux.
In any case, mercurial and git are really very similar, far closer
to each other than any third system, so it's not like the decision is
a descent into heresy. Hopefully some useful cross-pollination
can occur, and converting history from one to the other would be
simple if anyone ever wanted to.
As for explicit renames, people are confused on the subject.
IMHO, the two most revolutionary things about git are:
- Finally, a complete break from file-oriented history. History is made
of trees, and trees are made of files. There is no direct connection
between files in different commits.
- An explicit representation of an in-progress merge.
This is what makes multiple merge strategies easily implementable.
Third, I suppose, is the raw diff format and the diffcore pipeline.
But finally getting away from the SCCS & RCS idea that the file is the
unit of history is one of git's Great Features, and it shouldn't be
thrown away.
What people who are asking for explicit rename tracking actually want
is automatic rename merging. If branch A renames a file, and branch B
corrects a typo on a comment somewhere, they'd like the merge to
both patch and rename the file. If you can do that, you have met the
need, even if your solution isn't the one the feature requester
imagined.
(This is the general consulting problem: a client calls when they've
been trying a solution and can't get past some problem. Usually, this
is because they've wandered into a blind alley, and what they're asking
for is either far more difficult than necessary, or will just lead them
into greater problems. The first thing you have to determine is what
they actually want to do, as distinct from how they've decided to do it.)
But, as Linus has pointed out, this is a very partial solution which
introduces a lot of difficulties elsewhere. File renaming is a subset of
the general class of code reorganizations. Source files will be split,
merged, and have functions moved back and forth. You want the patch to
find the code it applies to even if that code was moved.
And that can be done by taking a more global view of the patch.
Identical file names is only a heuristic. If the hunk on branch A
can't find a place to apply on the same file in branch B, then
you have to look a little harder, either at changes from branch B
that introduce matching code elsewhere, or perhaps looking
through history for a change that removed the match from the
obvious place to see if it added a match elsewhere.
The one thing that makes this difficult is git-read-tree's automatic
collapse of "trivial" merges. If branch B moves foo() unchanged from
x.c to y.c, while branch A doesn't touch y.c, but edits foo() in x.c,
git-read-tree will collapse the changes to y.c before even invoking
the advanced resolve script.
(The solution might be to keep *four* versions of the file in the index:
the three pre-merge, *and* the post-merge. Then git-write-tree makes
sure everything has a stage 0 entry and strips out the stage 1, 2 and
3 entries. This way, one merge algorithm can use another as a
subroutine but decide not to accept something it did.)
But anyway, it's the merging that's the desired feature. Explicitly
recording renames is only the means to that end, and is superfluous
if there's another way of getting there. (And the place to look for
interesting new ideas in that area Darcs.)
next reply other threads:[~2006-05-05 0:57 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-05 0:56 linux [this message]
2006-05-05 6:22 ` [ANNOUNCE] Git wiki Fredrik Kuivinen
2006-05-05 6:26 ` Jakub Narebski
2006-05-05 9:23 ` Petr Baudis
2006-05-05 9:51 ` Junio C Hamano
2006-05-05 16:40 ` Petr Baudis
2006-05-05 16:47 ` Jakub Narebski
2006-05-05 18:49 ` Jakub Narebski
2006-05-05 16:36 ` Petr Baudis
2006-05-05 17:48 ` Linus Torvalds
2006-05-05 19:04 ` Dave Jones
2006-05-05 18:15 ` Petr Baudis
2006-05-05 18:20 ` Petr Baudis
2006-05-05 18:27 ` Jakub Narebski
2006-05-05 18:31 ` Linus Torvalds
2006-05-05 18:54 ` Petr Baudis
2006-05-05 19:39 ` Jakub Narebski
2006-05-06 13:37 ` Jakub Narebski
2006-05-05 19:49 ` Junio C Hamano
2006-05-06 6:53 ` Martin Langhoff
2006-05-06 7:14 ` Junio C Hamano
2006-05-06 7:33 ` Jakub Narebski
2006-05-06 7:41 ` Junio C Hamano
2006-05-06 12:46 ` Bertrand Jacquin
2006-05-05 20:45 ` Olivier Galibert
-- strict thread matches above, loose matches on Subject: below --
2006-05-02 23:25 Petr Baudis
2006-05-02 23:33 ` Junio C Hamano
2006-05-03 8:39 ` Paolo Ciarrocchi
2006-05-03 9:00 ` Petr Baudis
2006-05-03 9:13 ` Paolo Ciarrocchi
2006-05-03 13:41 ` Nicolas Pitre
2006-05-03 14:29 ` Shawn Pearce
2006-05-03 15:01 ` Andreas Ericsson
2006-05-03 15:24 ` Paolo Ciarrocchi
2006-05-03 15:30 ` Jakub Narebski
2006-05-03 15:30 ` Linus Torvalds
2006-05-03 15:39 ` Paolo Ciarrocchi
2006-05-03 16:06 ` Linus Torvalds
2006-05-03 16:17 ` Jakub Narebski
2006-05-03 16:19 ` Paolo Ciarrocchi
2006-05-03 16:46 ` Jakub Narebski
2006-05-03 19:21 ` David Lang
2006-05-03 19:30 ` Petr Baudis
2006-05-03 19:46 ` David Lang
2006-05-03 20:07 ` Petr Baudis
2006-05-04 0:53 ` Daniel Barkalow
2006-05-03 16:47 ` Theodore Tso
2006-05-03 17:06 ` Linus Torvalds
2006-05-03 17:15 ` Theodore Tso
2006-05-03 17:40 ` Linus Torvalds
2006-05-03 22:39 ` Sam Ravnborg
2006-05-03 22:46 ` Petr Baudis
2006-05-03 22:50 ` Joel Becker
2006-05-03 23:05 ` Petr Baudis
2006-05-03 18:04 ` Daniel Barkalow
[not found] ` <20060503144522.7b5b7ba5.seanlkml@sympatico.ca>
2006-05-03 18:45 ` sean
2006-05-03 20:58 ` Junio C Hamano
2006-05-03 21:01 ` Junio C Hamano
2006-05-03 22:13 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060505005659.9092.qmail@science.horizon.com \
--to=linux@horizon.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).