在具有多个标签的提交中显示最新标签
Display latest tag in a commit with multiple tags
我有一个大型项目的脚本,有 10 个存储库,用于检查分支(本地、远程或标签)并最终显示每个存储库中的当前分支。
我使用git branch
来显示当前版本库中签出的分支或标签。这在大多数情况下工作正常,除非在同一个提交中有多个标签,导致打印该提交中的标签的随机标签。
我该如何解决这个问题?我应该以不同的方式实施它吗?
例子
for repo in ...
do
cd repo
git checkout || git checkout || git checkout ....
git branch ##(to verify what happened)
done
所以假设我 运行 ./checkoutAll feat1 origin/feat1 tags/ALL7
但是 ALL7
标记与 ALL6
在同一提交中,
git branch
显示 ALL6
而不是我特别要求结帐的 ALL7
。
编辑:下图是为了帮助那些试图帮助我的人,
那么,假设我 运行 git checkout tags/V9.00.00.ALL.04
然后 git 分支显示存在的随机标签 (* detached from ..
),在此示例中为 7。
有没有办法显示最新的?或者至少显示我要求它结帐的那个(即使 ALL7 与 ALL9 相同)?
不,没有办法:git并不总是有你在分支机构的想法;如果您签出单个提交,例如通过签出标签,你不在一个分支上,因此,git 无法告诉你你在哪个分支上。
据我所知,git 分支应该始终打印当前分支的名称,如果你在其中的话。
不清楚你想在哪里显示这些标签,但让我试着帮助你。
首先,让我们找到当前分支的最新提交哈希:
git rev-parse HEAD
然后,让我们找到所有标签:
git show-ref --tags --dereference
既然我们都有,我们可以将它们与 print/show 您的要求进行匹配。例如:
SHA_HEAD=$(git rev-parse HEAD)
ALL_TAGS=$(git show-ref --tags --dereference)
echo "$ALL_TAGS" | awk '/'$SHA_HEAD' refs\/tags\// { print }' | tr '\n' ' '
或者在一行中:
git show-ref --tags --dereference | awk '/'$(git rev-parse HEAD)' refs\/tags\// { print }' | tr '\n' ' '
签出标签时,通常会以 "headless" 签出,git branch
会说:
$ git branch
* (detached from TAG)
如果你想知道这个标签是哪个分支 "on",你可以检查你标记的 ref 是否是你的 repo 已知的任何分支的祖先。使用
$ git branch --contains TAG # (or HEAD)
您通常会得到多个候选人,因为放置标签后可能会创建任意数量的分支。 "the" 分支由您决定。
如果您想查看所有指向您当前结帐参考的标签,请使用:
$ git tag --points-at TAG # (or HEAD)
要查看所有符号引用,请使用
$ git log --oneline --decorate -1
我有一个大型项目的脚本,有 10 个存储库,用于检查分支(本地、远程或标签)并最终显示每个存储库中的当前分支。
我使用git branch
来显示当前版本库中签出的分支或标签。这在大多数情况下工作正常,除非在同一个提交中有多个标签,导致打印该提交中的标签的随机标签。
我该如何解决这个问题?我应该以不同的方式实施它吗?
例子
for repo in ...
do
cd repo
git checkout || git checkout || git checkout ....
git branch ##(to verify what happened)
done
所以假设我 运行 ./checkoutAll feat1 origin/feat1 tags/ALL7
但是 ALL7
标记与 ALL6
在同一提交中,
git branch
显示 ALL6
而不是我特别要求结帐的 ALL7
。
编辑:下图是为了帮助那些试图帮助我的人,
那么,假设我 运行 git checkout tags/V9.00.00.ALL.04
然后 git 分支显示存在的随机标签 (* detached from ..
),在此示例中为 7。
有没有办法显示最新的?或者至少显示我要求它结帐的那个(即使 ALL7 与 ALL9 相同)?
不,没有办法:git并不总是有你在分支机构的想法;如果您签出单个提交,例如通过签出标签,你不在一个分支上,因此,git 无法告诉你你在哪个分支上。
据我所知,git 分支应该始终打印当前分支的名称,如果你在其中的话。
不清楚你想在哪里显示这些标签,但让我试着帮助你。
首先,让我们找到当前分支的最新提交哈希:
git rev-parse HEAD
然后,让我们找到所有标签:
git show-ref --tags --dereference
既然我们都有,我们可以将它们与 print/show 您的要求进行匹配。例如:
SHA_HEAD=$(git rev-parse HEAD)
ALL_TAGS=$(git show-ref --tags --dereference)
echo "$ALL_TAGS" | awk '/'$SHA_HEAD' refs\/tags\// { print }' | tr '\n' ' '
或者在一行中:
git show-ref --tags --dereference | awk '/'$(git rev-parse HEAD)' refs\/tags\// { print }' | tr '\n' ' '
签出标签时,通常会以 "headless" 签出,git branch
会说:
$ git branch
* (detached from TAG)
如果你想知道这个标签是哪个分支 "on",你可以检查你标记的 ref 是否是你的 repo 已知的任何分支的祖先。使用
$ git branch --contains TAG # (or HEAD)
您通常会得到多个候选人,因为放置标签后可能会创建任意数量的分支。 "the" 分支由您决定。
如果您想查看所有指向您当前结帐参考的标签,请使用:
$ git tag --points-at TAG # (or HEAD)
要查看所有符号引用,请使用
$ git log --oneline --decorate -1