From: Konstantin Khomoutov <kostix@bswap.ru>
To: Michal Novotny <clime@redhat.com>
Cc: git@vger.kernel.org
Subject: Re: get commit ID from a tree object ID
Date: Sat, 17 Mar 2018 16:01:28 +0300 [thread overview]
Message-ID: <20180317130128.mr2sfsrncykkubwo@tigra> (raw)
In-Reply-To: <CANT8FXR3pMgbwVWmwssDYhgv6eMFw4+Uz5xARGwFVVU1cMVmWw@mail.gmail.com>
On Sat, Mar 17, 2018 at 01:17:12PM +0100, Michal Novotny wrote:
> let's say I have made an annotated tag on a certain treeish:
>
> $ git tag -a -m msg tagname HEAD:
>
> Now, I can try to see the content of the tag:
>
> $ git tag -v tagname
> object 42a1c36553a50ceae2f75ffc4b1446c6c393eae7
> type tree
> tag tagname
> tagger clime <clime@redhat.com> 1521288727 +0100
>
> msg
> error: no signature found
>
>
> Can I use that object ID 42a1c36553a50ceae2f75ffc4b1446c6c393eae7 to
> get back to a particular commit from which the tag was created? The
> reason is that I would eventually like to checkout that commit.
In general, you can't, and that's because there can be any number of
commits referencing that tree. A typical case is a tree object
representing a subdirectory of your project which changes rarily, if
ever - in this case, each commit which includes the same state of this
subdirectory will refer the same tree object.
Another point to consider is that the commit itself only refers to a
single tree object -- that one which records the state of the top-level
project directory, and it usually refers to other three objects which
may, in turn, refer to others and so on - all the way down.
So actually a generic approach to what you need is a full scan of all
the commits in the repository with recursive traversing of the hierarchy
of trees of each of them (via `git ls-tree`) and looking for the SHA-1
name of the reference tree object. As you can see, this is not going to
be fast on repos of realistic size.
next prev parent reply other threads:[~2018-03-17 13:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-17 12:17 get commit ID from a tree object ID Michal Novotny
2018-03-17 13:01 ` Konstantin Khomoutov [this message]
2018-03-17 16:18 ` Jeff King
2018-03-17 17:57 ` Junio C Hamano
2018-03-26 22:14 ` Stefan Beller
2018-03-26 22:21 ` Jonathan Nieder
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=20180317130128.mr2sfsrncykkubwo@tigra \
--to=kostix@bswap.ru \
--cc=clime@redhat.com \
--cc=git@vger.kernel.org \
/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 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).