【问题标题】:Why does git-for-each-ref fail to sort tags correctly?为什么 git-for-each-ref 无法正确排序标签?
【发布时间】:2011-01-02 13:22:43
【问题描述】:

当我有一个包含轻量级标签和带注释标签的存储库时,git-for-each-ref 似乎只对其中一组进行排序。我想修改我对for-each-ref 的调用以获取对所有标签进行排序并将它们混合在输出中的输出。

例如:

bash-3.2$ git 标签 | > xargs -IT git log -n 1 --format='%at T' T | > 排序-rn | > awk '{打印 $2}' 重量3 at3 重量2 at2 重量1 at1 bash-3.2$ git for-each-ref --sort=-authordate refs/tags | awk '{打印 $3}' 参考/标签/lwt3 参考/标签/lwt2 参考/标签/lwt1 参考/标签/at1 参考/标签/at2 参考/标签/at3 bash-3.2$ git --version git 版本 1.6.6.80.g2df32

使用-committerdate-taggerdate 会生成类似的输出,并且标签永远不会正确排序。当使用-*authordate-*committerdate时,被排序的组是倒置的,而-*taggerdate什么都不排序。

还有其他我不知道的选项吗?这是正确的行为吗?我可以理解为什么 committerdate 或 taggerdate 只会分别对提交或标签进行排序,但似乎 authordate 应该做我想做的事。

【问题讨论】:

  • - 不是表示您希望反转排序吗?对于标签问题,有问题的标签是带注释的标签吗?如果他们不是,我认为那里没有日期可以排序。
  • 一半的标签被注释(at1、at2、at3)。标签 lw1、lw2 和 lw3 是轻量级(无注释)标签。

标签: git sorting


【解决方案1】:

好的,继续验证我在评论中所说的话:

只有带注释的标签才会在存储库中创建选项卡对象,其中包含您尝试在此处排序的 taggerdate 字段等内容。您的标签很可能是轻量级标签,因此不包含此类信息。

对于另一半,committerdate 和 authordate 似乎对我来说在标签上正常工作 - 它们只是对标签指向的提交进行排序,因为没有关于标签本身何时创建的信息。 (并且当且仅当您将 - 放在前面时,它们才会反转排序)

【讨论】:

    【解决方案2】:

    要根据提交日期对带注释的标签和轻量级标签进行完全排序,我正在使用:

    git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
      sort -n | awk '{ print $4, $3; }' 
    

    此命令将按时间顺序列出每个标签和相关的提交对象 ID。

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2020-11-07
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多