Re: Problem with git diff
- From
Elijah Newren <newren@gmail.com>
- Date
- Jul 9, 2019, 23:13 UTC
- Message-ID
- <CABPp-BE1fQs99ipi9Y8gfQO3QHkxzQhn1uriEbj6YjdYH839eQ@mail.gmail.com>
- In-Reply-To
- <1288734232ea45e0be655668ac60d98f@ASGEXCPWP07.ga.com>
Hi John,
On Tue, Jul 9, 2019 at 3:57 PM McRoberts, John <John.McRoberts@ga.com> wrote:
Show 43 quoted lines
>
> 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.
Show 5 quoted lines
> 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
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/