如何阻止用户推送所有标签(git push --tags)?

Car*_*näs 5 git atlassian-sourcetree azure-devops

在发现git标签可以用斜杠命名以使其以文件夹结构排列之前,我们创建了很多标签。现在,真的很难摆脱名称错误的标签,因为尽管我删除了服务器上名称错误的标签,但突然有人没有在本地删除其标签将所有标签推送到服务器上,然后旧标签和新标签都再次出现在服务器上。

我们将SourceTree用作git客户端(是的,我到过这里并确保每个人都没有选中“ push all tags”复选框,但是新来的人到了,计算机也被替换了)和Visual Studio Team Services Git回购。

我希望每个人都能单独创建和推送标签,我只是想避免大量推送标签。

我已经读过这篇文章git pre-push hook,如果是--tags则不要运行,但是该解决方案似乎在Windows中不起作用。

Mar*_*Liu 8

无论是 git hooks 还是其他脚本,都需要在本地机器上单独运行。所以我会建议在开发人员在本地机器上创建自己的标签之前将标签与远程同步

实际上它只需要为每台本地机器执行一次,所以开发人员只需要在工作之前在他们的机器上运行以下命令(删除本地标签并从远程获取所有标签):

git tag -l | xargs git tag -d
git fetch --tags
Run Code Online (Sandbox Code Playgroud)

然后,开发人员可以在自己的本地回购工作,甚至git push推动所有标签选项中选择SourceTree不会影响你删除的旧标签。

此外,当服务器端钩子将来可用于 VSTS 时,您还可以使用 post-push hooks 来检查删除的标签是否再次推送到远程。如果是,请停止推送您在 post-push hook 中指定的某些标签。