* Pinned references?
@ 2026-06-18 18:37 Erik Östlund
2026-06-19 7:38 ` Patrick Steinhardt
0 siblings, 1 reply; 3+ messages in thread
From: Erik Östlund @ 2026-06-18 18:37 UTC (permalink / raw)
To: git
I'd like to be able to express a reference together with an expected
object ID, for example with strawman syntax like:
refs/tags/v1.2.3?oid=a1b2c3d4
The intended semantics would be that both the reference and object ID
must exist, and Git should fail if the reference does not resolve to the
specified object ID.
Tags are nice because they convey human meaning. Object IDs are nice
because they are immutable. As it is, I often have to choose between the
two, or represent them separately in external tooling.
Is there existing terminology, prior discussion, or an accepted Git-native
approach for this kind of "ref plus expected OID" invariant? I
searched both the Git reference documentation and the mailing list
archives, but couldn't find what I was looking for.
Thanks,
Erik
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Pinned references?
2026-06-18 18:37 Pinned references? Erik Östlund
@ 2026-06-19 7:38 ` Patrick Steinhardt
2026-06-19 16:25 ` Junio C Hamano
0 siblings, 1 reply; 3+ messages in thread
From: Patrick Steinhardt @ 2026-06-19 7:38 UTC (permalink / raw)
To: Erik Östlund; +Cc: git
On Thu, Jun 18, 2026 at 08:37:26PM +0200, Erik Östlund wrote:
> I'd like to be able to express a reference together with an expected
> object ID, for example with strawman syntax like:
>
> refs/tags/v1.2.3?oid=a1b2c3d4
>
> The intended semantics would be that both the reference and object ID
> must exist, and Git should fail if the reference does not resolve to the
> specified object ID.
>
> Tags are nice because they convey human meaning. Object IDs are nice
> because they are immutable. As it is, I often have to choose between the
> two, or represent them separately in external tooling.
>
> Is there existing terminology, prior discussion, or an accepted Git-native
> approach for this kind of "ref plus expected OID" invariant? I
> searched both the Git reference documentation and the mailing list
> archives, but couldn't find what I was looking for.
You can already kind of do this:
$ git rev-parse v2.54.0
0b13e48a3a30cdfa94e8ef842e24d6045ab3d015
$ git rev-parse v2.54.0-0-g0b13e48a3
0b13e48a3a30cdfa94e8ef842e24d6045ab3d015
$ git rev-parse v2.54.0-0-g95e20213f
95e20213faefeb95df29277c58ac1980ab68f701
This is described under gitrevisions(7), `<describeOutput>`. The only
gotcha is that this format will not verify that the tag and the object
ID actually match. But other than that it gives you the ability to have
both the human-readable name and the machine-readable commit ID in
there.
As said, we don't verify that those two revisions actually match. So in
the case where they don't the result is certainly going to be lots of
confusion. It certainly is one of the more surprising syntaxes that we
have in Git.
Patrick
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Pinned references?
2026-06-19 7:38 ` Patrick Steinhardt
@ 2026-06-19 16:25 ` Junio C Hamano
0 siblings, 0 replies; 3+ messages in thread
From: Junio C Hamano @ 2026-06-19 16:25 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Erik Östlund, git
Patrick Steinhardt <ps@pks.im> writes:
> You can already kind of do this:
>
> $ git rev-parse v2.54.0
> 0b13e48a3a30cdfa94e8ef842e24d6045ab3d015
>
> $ git rev-parse v2.54.0-0-g0b13e48a3
> 0b13e48a3a30cdfa94e8ef842e24d6045ab3d015
>
> $ git rev-parse v2.54.0-0-g95e20213f
> 95e20213faefeb95df29277c58ac1980ab68f701
>
> This is described under gitrevisions(7), `<describeOutput>`. The only
> gotcha is that this format will not verify that the tag and the object
> ID actually match. But other than that it gives you the ability to have
> both the human-readable name and the machine-readable commit ID in
> there.
>
> As said, we don't verify that those two revisions actually match. So in
> the case where they don't the result is certainly going to be lots of
> confusion. It certainly is one of the more surprising syntaxes that we
> have in Git.
It is very unlikely we would change this, but it is a fun thought
experiment to imagine what would have happened if we insisted (i.e.,
verified and then died if it does not hold true) on the presence of
v2.54.0 tag and when the "hop" count is "-0-", we also insisted that
the hexadecimal part exactly matched the contents of v2.54.0 tag, or
when the "hop" count is not zero, we insisted that the hexadecimal
part names a commit that is descendant of the commit v2.54.0 names.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-19 16:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 18:37 Pinned references? Erik Östlund
2026-06-19 7:38 ` Patrick Steinhardt
2026-06-19 16:25 ` Junio C Hamano
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.