* [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories
@ 2016-02-16 20:24 Brian Norris
2016-02-16 20:45 ` Jeff King
0 siblings, 1 reply; 5+ messages in thread
From: Brian Norris @ 2016-02-16 20:24 UTC (permalink / raw)
To: git
Hi,
I'm not sure if this is a known behavior or a new bug report. I at least
couldn't find anyone mentioning this exact problem.
I'm using a git repository that has multiple "inital commits" (i.e., a
few different directory trees were imported via svn-to-git as different
branches) whose histories have been merged together to the single master
branch, and the file I want to track is both added and removed in only
one of those lineages. When I try to do:
$ git log -- <file>
on the deleted file in the master branch, I get no history. But if I
checkout the particular sub-tree of the merge history, then git-log
returns the appropriate history.
For specifics, I'm looking at this repo:
https://chromium.googlesource.com/chromiumos/platform2
and this file:
init/iptables.conf
which is added in this commit:
882271d255f4 Still more platform modules.
and deleted here:
65a8de6f85b8 chromeos-init: Remove firewall upstart jobs from platform/init
and whose branch of history is merged in via the following merge commit:
8f4314b70b78 Move 'src/platform/init' to 'src/platform2'
.
Test 1:
$ git checkout 8f4314b70b78
$ git log -- init/iptables.conf
## No output
Test 2:
$ git checkout 8f4314b70b78^2
$ git log -- init/iptables.conf
## See proper history
The behavior of Test 1 seems like a bug to me. Thoughts?
Regards,
Brian
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories
2016-02-16 20:24 [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories Brian Norris
@ 2016-02-16 20:45 ` Jeff King
2016-02-16 21:24 ` Brian Norris
0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2016-02-16 20:45 UTC (permalink / raw)
To: Brian Norris; +Cc: git
On Tue, Feb 16, 2016 at 12:24:42PM -0800, Brian Norris wrote:
> I'm not sure if this is a known behavior or a new bug report. I at least
> couldn't find anyone mentioning this exact problem.
>
> I'm using a git repository that has multiple "inital commits" (i.e., a
> few different directory trees were imported via svn-to-git as different
> branches) whose histories have been merged together to the single master
> branch, and the file I want to track is both added and removed in only
> one of those lineages. When I try to do:
>
> $ git log -- <file>
>
> on the deleted file in the master branch, I get no history. But if I
> checkout the particular sub-tree of the merge history, then git-log
> returns the appropriate history.
See the section on History Simplification in git-log. But basically,
when you specify a pathspec, git does not traverse side branches that
had no effect on the given pathspec.
So imagine we are walking backwards through history and showing each
commit, and we hit a merge where the content at that path is at some
sha1 X. We see on one side of the merge that the parent was also at X,
and on the other it was at Y. We do not bother following the commits
down the second parent at all. Perhaps it touched the file and perhaps
it did not, but it does not matter, as the merge threw away anything it
did in favor of the first parent.
Yours is a special case where the final result is "deleted". So there is
a merge where one side had already deleted it, and the other side had
some content, but the merge chose the deletion.
If you want to see the full history, you can with "--full-history"
(there are some other simplification possibilities, but I don't think
any of them are interesting for your particular case).
If you want to find the merge in question, something like:
git log --graph --full-history -m --oneline --raw -- init/iptables.conf
would work. In your case, it's probably:
8f4314b Move 'src/platform/init' to 'src/platform2'
-Peff
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories
2016-02-16 20:45 ` Jeff King
@ 2016-02-16 21:24 ` Brian Norris
2016-02-16 22:29 ` Jeff King
0 siblings, 1 reply; 5+ messages in thread
From: Brian Norris @ 2016-02-16 21:24 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Tue, Feb 16, 2016 at 03:45:57PM -0500, Jeff King wrote:
> See the section on History Simplification in git-log. But basically,
> when you specify a pathspec, git does not traverse side branches that
> had no effect on the given pathspec.
Thanks for the pointer. Is this done primarily for performance reasons,
or for UI simplicity (e.g., to avoid some kinds of double-counting)?
Seems like it generates unintuitive behaviors, but if it's helping block
other unintuitive behaviors, then maybe it can't be resolved easily.
FWIW, I quite often use git-log to look at the history of a deleted
file. Seems like a pretty big hole if the default behavior is going to
prune away the entire history of the file.
[...]
> If you want to see the full history, you can with "--full-history"
> (there are some other simplification possibilities, but I don't think
> any of them are interesting for your particular case).
--full-history gives me what I want (I'll admit, I didn't read through
all the other "History Simplification" documentation). Can I make this
the default somehow?
Brian
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories
2016-02-16 21:24 ` Brian Norris
@ 2016-02-16 22:29 ` Jeff King
2016-02-18 22:27 ` Brian Norris
0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2016-02-16 22:29 UTC (permalink / raw)
To: Brian Norris; +Cc: git
On Tue, Feb 16, 2016 at 01:24:29PM -0800, Brian Norris wrote:
> On Tue, Feb 16, 2016 at 03:45:57PM -0500, Jeff King wrote:
> > See the section on History Simplification in git-log. But basically,
> > when you specify a pathspec, git does not traverse side branches that
> > had no effect on the given pathspec.
>
> Thanks for the pointer. Is this done primarily for performance reasons,
> or for UI simplicity (e.g., to avoid some kinds of double-counting)?
> Seems like it generates unintuitive behaviors, but if it's helping block
> other unintuitive behaviors, then maybe it can't be resolved easily.
Both, I think. Try looking at "--full-history" and you will see that it
has a lot of cruft that is probably not that interesting. But
simplifying further (e.g., with "--simplify-merges") doesn't tell much
of the whole story (or maybe it does; we do see the final deletion
there, which is the end state).
But it's been a long time since I've thought hard on simplification like
this. Most of these issues were resolved many years ago; you'd have to
dig in the list archives to get the full story.
> FWIW, I quite often use git-log to look at the history of a deleted
> file. Seems like a pretty big hole if the default behavior is going to
> prune away the entire history of the file.
It doesn't normally. What happened is that you had two parallel
histories, and the final state of the file could be explained by
following the simpler of the two histories (the one where it never
existed in the first place).
> > If you want to see the full history, you can with "--full-history"
> > (there are some other simplification possibilities, but I don't think
> > any of them are interesting for your particular case).
>
> --full-history gives me what I want (I'll admit, I didn't read through
> all the other "History Simplification" documentation). Can I make this
> the default somehow?
No, but you can make an alias that includes it.
-Peff
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories
2016-02-16 22:29 ` Jeff King
@ 2016-02-18 22:27 ` Brian Norris
0 siblings, 0 replies; 5+ messages in thread
From: Brian Norris @ 2016-02-18 22:27 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Tue, Feb 16, 2016 at 05:29:42PM -0500, Jeff King wrote:
> On Tue, Feb 16, 2016 at 01:24:29PM -0800, Brian Norris wrote:
>
> > On Tue, Feb 16, 2016 at 03:45:57PM -0500, Jeff King wrote:
> > > See the section on History Simplification in git-log. But basically,
> > > when you specify a pathspec, git does not traverse side branches that
> > > had no effect on the given pathspec.
> >
> > Thanks for the pointer. Is this done primarily for performance reasons,
> > or for UI simplicity (e.g., to avoid some kinds of double-counting)?
> > Seems like it generates unintuitive behaviors, but if it's helping block
> > other unintuitive behaviors, then maybe it can't be resolved easily.
>
> Both, I think. Try looking at "--full-history" and you will see that it
> has a lot of cruft that is probably not that interesting. But
I wasn't seeing the "cruft" at first, but now I see. It appears, BTW,
that 'git log --full-history -- <path>' gives vastly different commits
than 'git log --full-history --graph -- <path>'. (The latter has a lot
more "cruft" about unrelated merges.) That seems like a weird
inconsistency...
> simplifying further (e.g., with "--simplify-merges") doesn't tell much
> of the whole story (or maybe it does; we do see the final deletion
> there, which is the end state).
git log --full-history --simplify-merges -- init/iptables.conf
and
git log --full-history --simplify-merges --graph --oneline -- init/iptables.conf
give good results for me, showing every commit that actually modifies
the file, AFAICT.
> > FWIW, I quite often use git-log to look at the history of a deleted
> > file. Seems like a pretty big hole if the default behavior is going to
> > prune away the entire history of the file.
>
> It doesn't normally.
That doesn't really change my statement.
> What happened is that you had two parallel
> histories, and the final state of the file could be explained by
> following the simpler of the two histories (the one where it never
> existed in the first place).
I (sort of) understand what happened. But I disagree that it's a good
default. It's obviously not what the user is asking for.
> > > If you want to see the full history, you can with "--full-history"
> > > (there are some other simplification possibilities, but I don't think
> > > any of them are interesting for your particular case).
> >
> > --full-history gives me what I want (I'll admit, I didn't read through
> > all the other "History Simplification" documentation). Can I make this
> > the default somehow?
>
> No, but you can make an alias that includes it.
Sure.
Thanks for the help!
Brian
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-02-18 22:27 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-16 20:24 [BUG] git-log: tracking deleted file in a repository with multiple "initial commit" histories Brian Norris
2016-02-16 20:45 ` Jeff King
2016-02-16 21:24 ` Brian Norris
2016-02-16 22:29 ` Jeff King
2016-02-18 22:27 ` Brian Norris
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).