All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Aguilar <davvid@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Sebastian Schuberth <sschuberth@gmail.com>,
	Jens Lehmann <Jens.Lehmann@web.de>,
	Heiko Voigt <hvoigt@hvoigt.net>
Subject: Re: Re*: mergetool: support --tool-help option like difftool does
Date: Fri, 24 Aug 2012 01:31:04 -0700	[thread overview]
Message-ID: <CAJDDKr6zk3ztEXeX8=vn3apZ3k1DxdCAu2ZDyqtNnb=Cb5ZUvQ@mail.gmail.com> (raw)
In-Reply-To: <7vvcg94if1.fsf@alter.siamese.dyndns.org>

On Thu, Aug 23, 2012 at 10:39 AM, Junio C Hamano <gitster@pobox.com> wrote:
> David Aguilar <davvid@gmail.com> writes:
>> Would the ability to resolve the various merge situations using
>> the command-line be a wanted addition?
>>
>> This would let a submodule or deleted/modified encountering
>> user do something like:
>>
>> $ git mergetool --theirs -- submodule
>>
>> ...and not have to remember the various git commands that it runs.
>
> Does it have to run various git commands?  For a normal path, all it
> needs to do is "git checkout --theirs $path", no?
>
> What does it mean to resolve a conflicted merge of a gitlink to take
> "theirs"?  We obviously would want to point the resolved gitlink at
> the submodule commit their side wants in the resulting index but what,
> if any, should we do to the submodule itself?
>
> Stepping back a bit, if there is no conflict, and as a result of a
> clean merge (this applies to the case where you check out another
> branch that has different commit at the submodule path), if gitlink
> changed to point at a different commit in the submodule, what should
> happen?
>
> If you start from a clean working tree, with your gitlink pointing
> at the commit that matches HEAD in the submodule, and if the working
> tree of the submodule does not have any local modification, it may
> be ideal to check out the new commit in the submodule (are there
> cases where "git checkout other_branch" in the superproject does not
> want to touch the submodule working tree?).
>
> There are cases where it is not possible; checking out the new
> commit in the submodule working tree may not succeed due to local
> modifications.  But is that kind of complication limited to the
> merge resolution case?  Isn't it shared with normal "switching
> branches" case as well?
>
> If so, it could be that your "git mergetool --theirs -- submodule"
> is working around a wrong problem, and the right solution may be to
> make "git checkout --theirs -- $path" to always do an appropriate
> thing regardless of what kind of object $path is, no?

True.

Admittedly, I'm not a heavy submodule user myself so I
tried crafting the directory vs submodule conflict to see
what the usability is like.

checkout --theirs and --ours could learn a few tricks.

When trying to choose the directory in that situation
I had to  had to "git rm --cached" the submodule path
so that git would recognize that there was no longer a conflict.

That makes sense to me because I was following along by
reading the mergetool code, but I don't think most users
would know to "git rm" a path which they intend to keep.

Afterwards, the .git file is left behind, which could cause
problems elsewhere since we really don't want a .git file
in that situation.  I'm not even sure what to do about the
.gitmodules file either.

Here's the script I was using to setup the merge conflict
in case anyone wants to get a feel for the usability around
this edge case.

Pass --submodule if you want the remote side to have a
submodule.  By default, the local side has a submodule and
the remote side of the merge brings along a directory.

That said, this really isn't an issue, per say.
I first poked at it because I noticed that mergetool
still needed stdin for some things.

It's certainly an edge case, and perhaps this just shows
that mergetool really is the right porcelain for the job
when a user runs into these types of conflicts
(the stdin thing really isn't an issue).


#!/bin/sh
if test "$1" = "--submodule"
then
	first=with-directory
	second=with-submodule
	echo "local will be a directory, remote will be a submodule"
else
	first=with-submodule
	second=with-directory
	echo "local will be a submodule, remote will be a directory"
fi

repo=submodule-conflict-$$ &&
echo "creating $repo" &&
mkdir "$repo" &&
cd "$repo" &&
git init &&
git commit --allow-empty -m'initial' &&
git checkout -b with-directory master &&
mkdir the-conflict &&
touch the-conflict/path &&
git add the-conflict/path &&
git commit -m'added path into the-conflict' &&
git checkout -b with-submodule master &&
git submodule add ./ the-conflict &&
git commit -m'added submodule as the-conflict' &&
git checkout -b tmp-merge master &&
git merge $first &&
git merge $second
-- 
David

  reply	other threads:[~2012-08-24  8:31 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-23  7:10 [PATCH 0/4] Various merge / diff tool related minor clean-ups and improvements Sebastian Schuberth
2012-07-23  7:14 ` [PATCH v2 0/5] " Sebastian Schuberth
2012-07-23  7:17   ` [PATCH v2 1/5] Sort the list of tools that support both merging and diffing alphabetically Sebastian Schuberth
2012-07-23  7:18   ` [PATCH v2 2/5] Use variables for the lists of tools that support merging / diffing Sebastian Schuberth
2012-07-23 16:46     ` Junio C Hamano
2012-07-23 18:30       ` Sebastian Schuberth
2012-07-23 18:32         ` [PATCH 1/4] " Sebastian Schuberth
2012-07-23 18:37         ` [PATCH v2 2/5] " Junio C Hamano
2012-07-23 19:03           ` Sebastian Schuberth
2012-07-23  7:18   ` [PATCH 3/5] Explicitly list all valid diff tools and document --tool-help as an option Sebastian Schuberth
2012-07-23 16:48     ` Junio C Hamano
2012-07-23 17:21       ` mergetool: support --tool-help option like difftool does Junio C Hamano
2012-07-23 18:56         ` Sebastian Schuberth
2012-07-23 18:58           ` [PATCH] " Sebastian Schuberth
2012-07-23 19:52             ` Junio C Hamano
2012-07-23 20:14               ` Sebastian Schuberth
2012-07-23 20:44                 ` David Aguilar
2012-07-23 21:16                   ` Junio C Hamano
2012-07-23 21:27                     ` Sebastian Schuberth
2012-07-23 22:31                       ` Junio C Hamano
2012-08-23  5:33         ` Re*: " Junio C Hamano
2012-08-23  7:39           ` David Aguilar
2012-08-23 17:39             ` Junio C Hamano
2012-08-24  8:31               ` David Aguilar [this message]
2012-08-26 18:38                 ` Jens Lehmann
2012-07-23  7:19   ` [PATCH v2 4/5] Make sure to use Araxis' "compare" and not e.g. ImageMagick's Sebastian Schuberth
2012-07-23 16:50     ` Junio C Hamano
2012-07-23 19:37       ` [PATCH] " Sebastian Schuberth
2012-07-23 20:47         ` Junio C Hamano
2012-07-23 21:09           ` Sebastian Schuberth
2012-07-23 21:24             ` Junio C Hamano
2012-07-23 21:31               ` Sebastian Schuberth
2012-07-23 21:34               ` David Aguilar
2012-07-23 21:44                 ` Sebastian Schuberth
2012-07-23 21:26             ` Andreas Schwab
2012-07-23 22:22             ` Junio C Hamano
2012-07-23 22:39               ` Sebastian Schuberth
2012-07-23 22:41               ` Junio C Hamano
2012-07-23 23:09                 ` Sebastian Schuberth
2012-07-23  7:20   ` [PATCH v2 5/5] Add a few more code comments and blank lines in guess_merge_tool Sebastian Schuberth

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='CAJDDKr6zk3ztEXeX8=vn3apZ3k1DxdCAu2ZDyqtNnb=Cb5ZUvQ@mail.gmail.com' \
    --to=davvid@gmail.com \
    --cc=Jens.Lehmann@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hvoigt@hvoigt.net \
    --cc=sschuberth@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 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.