From: Clemens Buchacher <drizzd@aon.at>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, johannes.schindelin@gmx.de, raa.lkml@gmail.com
Subject: Re: [PATCH] modify/delete conflict resolution overwrites untracked file
Date: Sun, 28 Dec 2008 12:44:45 +0100 [thread overview]
Message-ID: <20081228114445.GA8511@localhost> (raw)
In-Reply-To: <7vskopwxej.fsf@gitster.siamese.dyndns.org>
On Mon, Dec 15, 2008 at 02:22:28AM -0800, Junio C Hamano wrote:
> Clemens Buchacher <drizzd@aon.at> writes:
> > On Sun, Dec 14, 2008 at 07:34:46PM -0800, Junio C Hamano wrote:
> >> merge-recursive: do not clobber untracked working tree garbage
> >>
> >> When merge-recursive wanted to create a new file in the work tree (either
> >> as the final result, or a hint for reference purposes while delete/modify
> >> conflicts), it unconditionally overwrote an untracked file in the working
> >> tree. Be careful not to lose whatever the user has that is not tracked.
> >
> > This leaves the index in an unmerged state, however, so that a subsequent
> > git reset --hard still kills the file. And I just realized that the same
> > goes for merge-resolve. So I'd prefer to abort the merge, leave everything
> > unchanged and tell the user to clean up first.
>
> That is unfortunately asking for a moon, I am afraid.
>
> It needs a major restructuring of the code so that the recursive works
> more like the way resolve works, namely, changing the final "writeout"
> into two phase thing (the first phase making sure nothing is clobbered in
> the work tree, and then the second phase actually touching the work tree).
I've been giving this some thought and I would like to propose the following
solution:
1. Save index state.
2. Merge using whichever strategy, in index only, ignoring work tree.
This step includes rename detection.
3. Check that work tree files match original index, if index does not match
HEAD. Otherwise abort, restore index and leave everything unchanged.
4. Checkout index, overwriting work tree files, and removing files which are
in HEAD, but not in the index.
5. If the merge was clean, commit.
AFAICS, this is largely the behavior right now, except that steps 3 and 4
are intermingled with step 2, which makes it impossible to abort the merge
if an untracked file is in the way after rename detection.
The idea at step 3 is that we can decide whether or not to proceed, based
only on the merge result, irrespective of the strategy used, possible rename
detection, or conflict resolution.
Apart from the fact that this seems like the sane thing to do, I want this
behavior because it allows me to do
git merge <branch>
# Conflicts? I don't have time for that now.
git reset --hard HEAD
under all circumstances, without touching any untracked files.
Do you agree that this is a desireable goal?
I have not looked into d/f conflicts, but I am under the impression that
this could also be handled at step 3, as far as the work tree is concerned.
Is the above proposal a workable approach, which I can pursue independently
of the major rewrite wrt. d/f conflicts Johannes indicated?
next prev parent reply other threads:[~2008-12-28 11:46 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-10 20:12 [PATCH] modify/delete conflict resolution overwrites untracked file Clemens Buchacher
2008-12-10 20:51 ` Junio C Hamano
2008-12-10 21:11 ` Clemens Buchacher
2008-12-10 23:36 ` Junio C Hamano
2008-12-11 8:07 ` Clemens Buchacher
2008-12-11 8:13 ` Junio C Hamano
2008-12-15 0:46 ` Clemens Buchacher
2008-12-15 1:03 ` Junio C Hamano
2008-12-15 3:34 ` Junio C Hamano
2008-12-15 9:34 ` Johannes Schindelin
2008-12-15 10:35 ` Junio C Hamano
2008-12-15 11:03 ` Johannes Schindelin
2008-12-15 9:59 ` Clemens Buchacher
2008-12-15 10:22 ` Junio C Hamano
2008-12-15 10:50 ` Mike Ralphson
2008-12-15 11:09 ` Johannes Schindelin
2008-12-15 11:45 ` Mike Ralphson
2008-12-15 22:13 ` Junio C Hamano
2008-12-15 23:02 ` Clemens Buchacher
2008-12-16 0:16 ` Junio C Hamano
2008-12-16 1:09 ` Jakub Narebski
2008-12-28 11:44 ` Clemens Buchacher [this message]
2008-12-28 22:21 ` Junio C Hamano
2008-12-28 23:53 ` Clemens Buchacher
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=20081228114445.GA8511@localhost \
--to=drizzd@aon.at \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=raa.lkml@gmail.com \
/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).