From: Johan Herland <johan@herland.net>
To: git@vger.kernel.org
Cc: Andy Parkins <andyparkins@gmail.com>,
martin f krafft <madduck@madduck.net>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: merging .gitignore
Date: Wed, 03 Oct 2007 11:28:56 +0200 [thread overview]
Message-ID: <200710031128.56472.johan@herland.net> (raw)
In-Reply-To: <200710030923.22767.andyparkins@gmail.com>
On Wednesday 03 October 2007, Andy Parkins wrote:
> I am still having difficult seeing why you want to hide conflicts
> in .gitignore. It's just as possible to get and resolve conflicts in
> gitignore as in any other file.
Agreed. What about the following:
- No special merge rules for .gitignore
- Teach the .gitignore parser to ignore conflict markers (i.e. regard them
as comments)
This way, the user will have to merge .gitignore like any other file, but if
for some reason, the user is not able to do so (say, git needs to
consult .gitignore before the user has had a chance to resolve the
conflict), the fallback result will be similar to a union merge, which
shouldn't be extremely harmful in .gitignore's case.
I do not think we really want to create an auto-merge algorithm
for .gitignore, and then depend on this auto-merge algorithm to _always_
succeed with the _correct_ result and _no_ conflicts. These algorithms tend
to be extremely tricky to get right, especially for the "always correct"
requirement.
<rant>
Mercurial had a similar problem some months ago. They have their tag
definitions stored in a versioned file in the working tree (.hgtags IIRC).
But the repo tag state (i.e. Mercurial's opinion at any time as to _which_
tags are defined and _where_ they point) is not deduced from the copy in
your current working tree at all. (That would of course limit you to only
ba able to refer to tags defined earlier on the particular branch you're
currently on.) Instead the repo tag state was found by consulting
the "head-most" copy of the .hgtags file (for some definition
of "head-most" including non-obvious things like which branch has the most
recent commit, etc). The end result was that you could get some _really_
interesting behaviour depending on the order in which you commited totally
unrelated changes to two different branches which happened to have
different .hgtags files. (E.g.: Given two branches A, B, and - in .hgtags
on branch A - tag Foo is defined to point at rev X, and - in .hgtags on
branch B - Foo points at rev Y. Now, whether you got rev X or rev Y when
you checked out Foo, depended on which of branch A or branch B had the most
recent (totally unrelated, i.e. not even touching .hgtags) commit.)
I (and others) pointed out this bug on their ML, and instead of fixing the
braindeadness of allowing branched tag definitions in the repo in the first
place, they set about trying to create an auto-merge algorithm for deducing
the repo tag state from the various versions/branches of .hgtags found in
the repo. I didn't stick around for long enough to see how well this
auto-merge algorithm works (the misdesign of tags in Mercurial was one of
the reasons I started looking at git), but I would be surprised if
Mercurial today has a simple and straightforward way of deducing the repo
tag state that _always_ gives _correct_ (i.e. unsurprising) results, even
in the corner cases.
</rant>
Have fun! :)
...Johan
--
Johan Herland, <johan@herland.net>
www.herland.net
next prev parent reply other threads:[~2007-10-03 9:29 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-01 13:03 merging .gitignore martin f krafft
2007-10-01 13:48 ` Andy Parkins
2007-10-02 19:51 ` martin f krafft
2007-10-02 19:55 ` Junio C Hamano
2007-10-02 20:20 ` martin f krafft
2007-10-02 20:13 ` Pierre Habouzit
2007-10-02 20:47 ` Pierre Habouzit
2007-10-02 20:56 ` martin f krafft
2007-10-02 21:07 ` Pierre Habouzit
2007-10-02 21:49 ` martin f krafft
2007-10-02 22:07 ` Pierre Habouzit
2007-10-03 8:42 ` martin f krafft
2007-10-03 8:58 ` Pierre Habouzit
2007-10-02 21:02 ` Pierre Habouzit
2007-10-03 8:23 ` Andy Parkins
2007-10-03 9:28 ` Johan Herland [this message]
2007-10-03 12:41 ` Johannes Schindelin
2007-10-03 13:06 ` Johan Herland
2007-10-03 19:38 ` Junio C Hamano
2007-10-01 13:57 ` Johannes Schindelin
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200710031128.56472.johan@herland.net \
--to=johan@herland.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=andyparkins@gmail.com \
--cc=git@vger.kernel.org \
--cc=madduck@madduck.net \
/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.
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 NNTP newsgroup(s).