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

例如:

bash-3.2$ git 标签 |
> xargs -I T git log -n 1 --format='%at T' T |
> 排序 -rn |
> awk '{print $2}'
重量3
在 3
重量2
在 2
重量1
在 1
bash-3.2$ git for-each-ref --sort=-authordate refs/tags | awk '{print $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 应该做我想做的事。

最佳答案

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

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

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

关于git - 为什么 git-for-each-ref 无法正确排序标签?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2021599/

10-13 06:16
查看更多