代码之家  ›  专栏  ›  技术社区  ›  William Pursell

为什么每个ref的git不能正确地对标签排序?

  •  3
  • William Pursell  · 技术社区  · 15 年前

    git-for-each-ref for-each-ref 获取对所有标记进行排序并将它们混合到输出中的输出。

    例如:

    bash-3.2$ git tag | 
    > xargs -I T git log -n 1 --format='%at T' T |
    > sort -rn | 
    > awk '{print $2}'
    lwt3
    at3
    lwt2
    at2
    lwt1
    at1
    bash-3.2$ git for-each-ref --sort=-authordate refs/tags | awk '{print $3}'
    refs/tags/lwt3
    refs/tags/lwt2
    refs/tags/lwt1
    refs/tags/at1
    refs/tags/at2
    refs/tags/at3
    bash-3.2$ git --version
    git version 1.6.6.80.g2df32
    
    

    使用 -committerdate -taggerdate -*authordate -*committerdate ,被排序的组被反转,而 -*taggerdate 什么都没有。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Cascabel    15 年前

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

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

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

        2
  •  3
  •   Yann Droneaud    10 年前

    要根据提交日期将带注释的标记和轻量级标记一起排序,我使用:

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

    此命令将按时间顺序列出每个标记和关联的提交对象id。