Something I'm trying to figure out and can't find the answer myself. I'm
browsing a tree, for example:
$ git ls-tree HEAD~100
This list a set of files with the corresponding blob. Each blob has it's
own SHA1. Fine.
Now given a SHA1 I'd like to know which commit has created (was
containing) this specific blob?
What is the best way to achieve that?
Thanks.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:45:08
Pascal Obry wrote:
Now given a SHA1 I'd like to know which commit has created (was containing)
this specific blob?
Why do you want to know? The right method depends on your reason. You
probably know more than I do about this, but here are my thoughts.
If some loose object of yours got corrupted and you are trying to
see what exactly is missing, then (for this task) you are in luck. See
<http://www.kernel.org/pub/software/scm/git/docs/howto/recover-corrupted-blob-object.txt>.
If some packed object got corrupted, I'd be interested to hear how
this is handled. I think there was discussion recently of how to
recover from that situation. If you have the luxury, it might be good
to use unpack-objects to get to the first situation.
But I think that is not your situation. I'll assume for definiteness
that some source file appeared out of thin air in your /lost+found and
you are trying to figure out what it is. Then see
<http://thread.gmane.org/gmane.comp.version-control.git/44750/focus=44754>
and surrounding discussion. You could use "git ls-tree -r" if you do
not have the filename.
Hope that helps,
Jonathan
Thanks, I had a look. This is indeed giving some procedure... I was
hopping for something faster (git rev-list takes some time!).
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
Thanks, I had a look. This is indeed giving some procedure... I was hopping
for something faster (git rev-list takes some time!).
It's not really meant to be a common case; if the same file is created
under different names by different commits that aren't ancestors of
each other, then it's unclear which should be reported. As such,
there's no index or other such thing to quickly find the commits
corresponding to a blob, so you just have to walk the entire history.