【问题标题】:How do I stop users from pushing all tags (git push --tags)?如何阻止用户推送所有标签(git push --tags)?
【发布时间】:2017-08-14 18:49:00
【问题描述】:

在我们发现 git 标签可以用斜杠命名以将它们排列在文件夹结构中之前,我们创建了很多标签。现在真的很难去掉错名标签,因为虽然我删除了服务器上的错名标签,但突然有人没有删除他们的标签本地推送所有标签,然后旧标签和新标签又在服务器上。

我们使用 SourceTree 作为 git 客户端(是的,我一直在确保每个人都未选中“推送所有标签”复选框,但是新人到达并更换了计算机)和 Visual Studio Team Services Git回购。

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

我已阅读此帖子 git pre-push hook, don't run if is --tags,但该解决方案似乎不适用于 Windows。

【问题讨论】:

  • '我一直在确保每个人都未选中“推送所有标签”复选框'-也许你应该四处走走并要求人们删除过时的标签。但他们真的那么麻烦吗?在您的存储库中有一些旧标签有什么大不了的?
  • 没错,我可以这样做,但这意味着我没有时间真正做的管理。以后它可能会以错误的格式潜入新标签,这将需要重命名/删除。好吧,我想我们可以和他们一起生活,但我认为我们大多数人都喜欢让它整洁,当它们在 SourceTree 中结构良好时,更容易导航到旧标签。
  • 弄清楚如何在托管存储库上设置规则以防止推送匹配特定模式的引用。我们遇到了同样的问题,无论我们进行了多少次,只需要 1 个没有注意的流浪开发人员,每个人都再次获得了标签。最后我推送了正确的标签列表并阻止人们将refs/tags/*推送到我们的服务器,这最终使猛攻停止。
  • @LasseV.Karlsen 到目前为止,无法在 Team Services 中设置所需的 git 挂钩。
  • @LasseV.Karlsen 你知道你所做的事情是如何在 GitHub 中通过 webhook 或操作完成的吗?谢谢!

标签: git azure-devops atlassian-sourcetree


【解决方案1】:

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

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

git tag -l | xargs git tag -d
git fetch --tags

然后开发人员可以在他们自己的本地 repo 上工作,甚至 git push 在 SourceTree 中选择 push all tags 选项 不会影响您删除的旧标签。

另外,当server side hooks will available in future for VSTS时,你还可以使用post-push hooks来检查被删除的标签是否再次推送到远程。如果是,请停止推送您在 post-push 挂钩中指定的特定标签。

【讨论】:

  • 是的,很遗憾这似乎是唯一的选择。而且我认为我确实做到了,但不知何故,一个开发人员无论如何都拥有旧标签并推送它们......直到 Team Services 有更多可用的 git 挂钩,我将继续教育和管理。
猜你喜欢
  • 2019-08-19
  • 2023-01-14
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2012-04-19
  • 2015-02-18
  • 2012-08-13
相关资源
最近更新 更多