All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bryan Turner <bturner@atlassian.com>
To: Elijah Newren <newren@gmail.com>
Cc: "McRoberts, John" <John.McRoberts@ga.com>,
	"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Problem with git diff
Date: Tue, 9 Jul 2019 16:29:55 -0700	[thread overview]
Message-ID: <CAGyf7-FeAJwWuhu-Zkccsfrcbbf3tuuOWwobsa4OOK1=hWackg@mail.gmail.com> (raw)
In-Reply-To: <CABPp-BE1fQs99ipi9Y8gfQO3QHkxzQhn1uriEbj6YjdYH839eQ@mail.gmail.com>

On Tue, Jul 9, 2019 at 4:13 PM Elijah Newren <newren@gmail.com> wrote:
>
> Hi John,
>
> On Tue, Jul 9, 2019 at 3:57 PM McRoberts, John <John.McRoberts@ga.com> wrote:
> >
> > I am responsible for generating a list of all files changed between two
> > successive releases of software. I was using 'git diff' but have run into a
> > problem.
> >
> > Consider the following situation: A development branch comes off of commit A
> > and files are changed three times.  A tag (REL1) is placed on the third
> > commit.  Then the branch is merged back to master.  At this point, master's
> > HEAD is at C (and it remains there).  Two development branches are created
> > off of master, the first of which is not important here.  In the second one,
> > there are files changed and a tag (REL2) applied.
> >
> >
> > ---------------------[I]
> >
> > /      {dev branch}
> >
> > /
> >
> > /
> >              {master branch}
> > /
> >  [A] ---------------------------------[B]------------------------------->[C]
> > master <HEAD>
> >    \                               filelist 6                           /  \
> >     \                                                                  /
> > \
> >      \                                                                /
> > \
> >       \                                                              /
> > \
> >        \                {development branch}                        /
> > \
> >         \------->[D]----------------------->[E]-------------------[F]
> > \------[G]--------[H]
> >                                                                  REL1
> > REL2
> >                 fileset 1               fileset 2           fileset 3
> > fileset 4    fileset 5
> >
> > At this point, I run
> >     'git diff  -m --first-parent --pretty=fuller --decorate=short
> > --name-only REL2..REL2'
>
> Wow, we really, really need to throw errors and warnings when people
> use crazy range operators with diff.[1][2]  What version of git are
> you using that accepts --decorate=short as an argument to `git diff`?
> And why in the world does git diff accept --first-parent or
> --pretty=fuller?!?  That's insane for git-diff to swallow that.
> (#leftoverbits?)  Also, I think you meant `REL1` one of the two times
> you wrote `REL2`, which makes me suspect you may have done some
> copy-edit-paste and didn't try this actual command.
>
> > I expect to see only filesets 4 and 5 listed.  I also see filesets 1, 2 and
> > 3 showing up.  This means that the git diff command is showing files that,in
> > fact, did not change between the two tags.  By the way, I verified with a
> > file by file comparison that under REL2 and REL1, the files represented by
> > filesets 1, 2 and 3 had identical contents.
>
> From your description, I assume you actually ran something like
>   git diff --name-only REL1..REL2

Did you mean REL1...REL2 (3 dots)? 2 dots (REL1..REL2) is identical to
no dots (REL1 REL2), per the documentation for "git diff":

       git diff [<options>] <commit> <commit> [--] [<path>...]

           This is to view the changes between two arbitrary <commit>.

       git diff [<options>] <commit>..<commit> [--] [<path>...]

           This is synonymous to the previous form. If <commit> on one
side is omitted, it will have the same effect
           as using HEAD instead.

(Forgive me if I'm mistaken here!)

>
> which compares REL2 to the merge base of REL1 and REL2 (yes, this is
> totally counter-intuitive to a large percentage of the git userbase,
> but it is well documented and hard to change).  Also from your
> description, what you seem to want is
>   git diff --name-only REL1 REL2
>
> since you want to compare the two endpoints.  Does that help get what you want?
>
> Hope that helps,
> Elijah
>
> [1] https://public-inbox.org/git/CABPp-BECj___HneAYviE3SB=wU6OTcBi3S=+Un1sP6L4WJ7agA@mail.gmail.com/
> [2] https://public-inbox.org/git/CABPp-BGg_iSx3QMc-J4Fov97v9NnAtfxZGMrm3WfrGugOThjmA@mail.gmail.com/

  parent reply	other threads:[~2019-07-09 23:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-09 22:09 Problem with git diff McRoberts, John
2019-07-09 23:13 ` Elijah Newren
2019-07-09 23:26   ` -EXT-Re: " McRoberts, John
2019-07-09 23:29   ` Bryan Turner [this message]
2019-07-09 23:35     ` Elijah Newren

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='CAGyf7-FeAJwWuhu-Zkccsfrcbbf3tuuOWwobsa4OOK1=hWackg@mail.gmail.com' \
    --to=bturner@atlassian.com \
    --cc=John.McRoberts@ga.com \
    --cc=git@vger.kernel.org \
    --cc=newren@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.