gpt4 book ai didi

git - 如何使用 git hooks 自动重命名标签?

转载 作者:太空狗 更新时间:2023-10-29 13:42:46 25 4
gpt4 key购买 nike

我希望验证用户创建的所有标签(并在必要时重命名)以满足我们的规则。
例如,如果用户创建了"v1.2.3"标签,它应该自动重命名为"v1.02.03"

不幸的是,不存在 git tag 命令调用的 git hook。

这就是我实现 pre-push Hook 的原因,它会删除旧标签并在同一提交上创建新标签(修改后的名称)。

问题是 git push --tags 将 OLD TAGS 而不是 NEW TAGS 发送到远程仓库(尽管在 pre-push hook 删除它们后旧标签不再存在)。

如何在将标签推送到远程仓库之前自动重命名本地仓库上的标签?


编辑:
我通过将标签重命名逻辑复制到服务器端的 post-receive Hook 来解决我的问题。
至于现在,标记“v1.2.3”在客户端通过 pre-push Hook 重命名为“v1.02.03”,但旧标记名称(“v1.2.3”)被推送到远程 repo ,并且在远程 repo “v1.2.3”通过 post-receive Hook 再次重命名为“v1.02.03”。现在客户端和服务器都重命名了标签。

我应该说我对我的解决方案不满意吗?
仍然欢迎纯客户端解决方案。

最佳答案

不是核心 git 专家,但这是我的假设:当您使用 --tags 标志时,在执行 Hook 之前,所有引用都已存储在内存中。来自 git-push 的联机帮助页:

   --tags
All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line.

由于 refs 已经存在于内存中,因此您的预推 Hook 更改标签名称/删除和创建新标签没有任何效果。

IMO,为了处理这种情况,您可以简单地修改您的预推送 Hook ,即使一个标签命名不正确,在更改所有标签名称后也会失败。之后,再次运行预推送。

或者,您可以使用自定义命令 - 一个 git 别名,它根据您的要求重命名所有标签,然后调用 git push --tags。检查How to embed bash script directly inside a git alias .

关于git - 如何使用 git hooks 自动重命名标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40861546/

25 4 0