threads / discuss / 48923

Find commit that referenced a blob first

Subject: Find commit that referenced a blob first

## tl;dr

6 messages between Jul 19, 2018 and Jul 19, 2018.

replies: 5people: 4as markdown or json

Lars Schneider· Jul 19, 2018, 21:02 UTC · lore
Hi,

I have a blob hash and I would like to know what commit referenced this blob first in a given Git repo.

I could iterate through all commits sorted by date (or generation number) and then recursively search in the referenced trees until I find my blob. I wonder, is this the most efficient way to solve my problem? Is there some trick/existing Git command that would perform this search more efficiently for large repos?

Thank you, Lars

Stefan Beller· Jul 19, 2018, 21:19 UTC · re: Lars Schneider · lore

Re: Find commit that referenced a blob first

On Thu, Jul 19, 2018 at 2:02 PM Lars Schneider <larsxschneider@gmail.com> wrote:
Show 5 quoted lines
>
> Hi,
>
> I have a blob hash and I would like to know what commit referenced
> this blob first in a given Git repo.
git describe <blob>

If the given object refers to a blob, it will be described as <commit-ish>:<path>, such that the blob can be found at <path> in the <commit-ish>, which itself describes the first commit in which this blob occurs in a reverse revision walk from HEAD.

Since 644eb60bd01 (builtin/describe.c: describe a blob, 2017-11-15) (included first in 2.16.0

You're welcome, Stefan

Lars Schneider· Jul 19, 2018, 21:45 UTC · re: Stefan Beller · lore

Re: Find commit that referenced a blob first

Show 23 quoted lines
> On Jul 19, 2018, at 11:19 PM, Stefan Beller <sbeller@google.com> wrote:
> 
> On Thu, Jul 19, 2018 at 2:02 PM Lars Schneider <larsxschneider@gmail.com> wrote:
>> 
>> Hi,
>> 
>> I have a blob hash and I would like to know what commit referenced
>> this blob first in a given Git repo.
> 
> git describe <blob>
> 
> If the given object refers to a blob, it will be described as
> <commit-ish>:<path>,
> such that the blob can be found at <path> in the <commit-ish>, which itself
> describes the first commit in which this blob occurs in a reverse
> revision walk from HEAD.
> 
> Since
> 644eb60bd01 (builtin/describe.c: describe a blob, 2017-11-15)
> (included first in 2.16.0
> 
> You're welcome,
> Stefan
Awesome! Thank you very much :-)
- Lars
Jeff King· Jul 19, 2018, 21:47 UTC · re: Stefan Beller · lore

Re: Find commit that referenced a blob first

On Thu, Jul 19, 2018 at 02:19:34PM -0700, Stefan Beller wrote:
Show 14 quoted lines
> > I have a blob hash and I would like to know what commit referenced
> > this blob first in a given Git repo.
> 
> git describe <blob>
> 
> If the given object refers to a blob, it will be described as
> <commit-ish>:<path>,
> such that the blob can be found at <path> in the <commit-ish>, which itself
> describes the first commit in which this blob occurs in a reverse
> revision walk from HEAD.
> 
> Since
> 644eb60bd01 (builtin/describe.c: describe a blob, 2017-11-15)
> (included first in 2.16.0
Hmm.
  $ git describe cfbc47ee2d
  fatal: No tags can describe '83adac3c57ad8cd2c8d44b525414b949950e316d'.
  Try --always, or create some tags.
  $ git describe --always cfbc47ee2d
  83adac3c57:checkout-cache.c

That first output confused me for a moment. We can't produce a nice descriptive name for the commit in question, so we punt on the whole thing.

Anyway. I have found your diff --find-object to be more useful in practice. I.e.:

  git log --find-object=cfbc47ee2d

because I usually care less about a succinct name, and more about digging into the history (so adding "-p", etc).

-Peff
Junio C Hamano· Jul 19, 2018, 22:38 UTC · re: Stefan Beller · lore

Re: Find commit that referenced a blob first

Stefan Beller <sbeller@google.com> writes:
Show 14 quoted lines
> On Thu, Jul 19, 2018 at 2:02 PM Lars Schneider <larsxschneider@gmail.com> wrote:
>>
>> Hi,
>>
>> I have a blob hash and I would like to know what commit referenced
>> this blob first in a given Git repo.
>
> git describe <blob>
>
> If the given object refers to a blob, it will be described as
> <commit-ish>:<path>,
> such that the blob can be found at <path> in the <commit-ish>, which itself
> describes the first commit in which this blob occurs in a reverse
> revision walk from HEAD.

You walk from the latest to earlier commit (because there by definition can be is no reverse pointer from older to newer commit), and see if it has the blob, and stop when you find one. Wouldn't it generally find the most recent use, not the earliest use as Lars seems to want?

Show 7 quoted lines
>
> Since
> 644eb60bd01 (builtin/describe.c: describe a blob, 2017-11-15)
> (included first in 2.16.0
>
> You're welcome,
> Stefan
Stefan Beller· Jul 19, 2018, 22:45 UTC · re: Junio C Hamano · lore

Re: Find commit that referenced a blob first

On Thu, Jul 19, 2018 at 3:38 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 8 quoted lines
> > If the given object refers to a blob, it will be described as
> > <commit-ish>:<path>,
> > such that the blob can be found at <path> in the <commit-ish>, which itself
> > describes the first commit in which this blob occurs in a reverse
> > revision walk from HEAD.
>
> You walk from the latest to earlier commit (because there by
> definition can be is no reverse pointer from older to newer commit),

but a "reverse walk from HEAD" produces the commits to us in an order as if we were walking from earlier to latest?

← back to recent threads