检测本地和远程之间不同步的所有标签

问题描述

是否有一种简单的方法可以确定我的本地存储库中有哪些与远程存储库不同步的标签 不同步是指完全相同的标签名称指向不同的在我的本地与远程上提交。我能想到的两种情况可能是:

  1. 某人(或某物)移动了我之前提取标签。也许它被删除并重新创建,或者它已经存在时被强制创建。 (我意识到这令人不悦,但这并不能阻止它发生。)
  2. 我在本地创建了一个标签,然后有人(或某物)在不同的提交上创建了相同的标签名称,并在我之前将其推送出去。

表达这个问题的另一种方式可能是:

如果我运行以下命令,我的哪些本地标签将被更新:

git fetch origin --tags --force

更新:基于answer,这一行应该在Git Bash中工作:

diff <(git for-each-ref refs/tags --format="%(objectname)%09%(refname)") <(git ls-remote --tags | grep -v "\^{}")

说明:该命令列出您所有的本地标签,并对其进行格式化,使其使用与 ls-remote 相同的格式。 (%09 是制表符。)然后比较两个输出

解决方法

“简单”在旁观者眼中:使用 sudo nmcli con up id MyVPN --ask 转储遥控器中的标签,并使用 git ls-remote --tags 检查您的本地标签。比较标签的hash ID(在git for-each-ref refs/tags输出中,这是没有ls-remote后缀的数字;有后缀的那个,如果有,就是标签的hash ID标签的最终目标)。当名称匹配但哈希 ID 不同时,它们不同步。为此编写一个shell脚本会相对简单。