【问题标题】:What is the mean of ^{} in git ls-remote?git ls-remote 中的 ^{} 是什么意思?
【发布时间】:2022-01-22 22:52:05
【问题描述】:

符号^{}是什么意思?
如果我使用 git log 或 github 检查带有此符号的行中对提交的标记引用,那么没有此符号的重复对象是什么。

例子

2191702bddc9438e2e8beda602972fdb87a73a15        refs/tags/V1.0
0bfeb6f7a1d2789b3e3d9944edbe680cd7355b6a        refs/tags/V1.0^{}
6bde933efef11bbc75f71df2111b146748220ad8        refs/tags/V2.0
de33c8da37dba18f8d134f6a2a4c1e70da5593ae        refs/tags/V2.0^{}

【问题讨论】:

  • <some ref>^{} 是将某些东西(标签、分支)dereference 指向它最终指向的提交的语法。对于分支abcabc^{} 表示“分支 abc 当前指向的提交”
  • 您运行了什么命令来获得该输出? ^{} 语法将“带注释的标签”解析为其“基础对象”(例如参见 stackoverflow.com/questions/49283734/…stackoverflow.com/questions/43858778/…),但我不确定您看到的是实际重复的标签,还是两行每个标签。
  • 看起来0bfeb6f7 是上面标记对象(2191702bd)引用的提交对象。第二个标签及其目标提交也是如此。
  • @IMSoP 命令是git ls-remote --tags
  • @yaronsamuel 见git help revisions

标签: git github


【解决方案1】:

这些是带注释的标签。

另一种类型,轻量级标签,是指提交的名称。标签本身在 git 存储库中不作为单独的对象存在,但它只是普通提交对象的替代名称。

您的列表中的每个此类标签只有 1 行,例如:

1234567890c9438e2e8beda602972fdb87a73a15        refs/tags/lightweight

作为一个 git 图,你可以这样想:

                       master
                         v
*----*----*----*----*----*
                    ^
                  v9.1

但是,存在两行,其中一行使用 ^{} 语法,意味着这些标签是带注释的标签。

它们在 git 存储库中作为它们自己的单独对象存在,并且还引用常规提交对象。

所以用这两行:

2191702bddc9438e2e8beda602972fdb87a73a15        refs/tags/V1.0
0bfeb6f7a1d2789b3e3d9944edbe680cd7355b6a        refs/tags/V1.0^{}

这意味着带注释的标签对象在id为2191702...的对象中,而该标签对象指的是提交0bfeb6f7a...

                       master
                         v
*----*----*----*----*----*
                    |
                 tag-object
                    ^
                  V1.0

TL,DR:轻量级标签只显示第一行,第二行的存在意味着这些是带注释的标签,其中标签名称是指一个带注释的标签对象,而带有^{} 的第二个引用表示提交标签所指的。

【讨论】:

  • 感谢您的有用回答。有理由更喜欢带注释的标签而不是轻量级标签吗?
  • 轻量级标签只是提交的替代名称。一个带注释的标签可以有一条消息,并且会有一个作者和一个时间戳。带注释的标签也可以签名。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多