如何锁定现有的git标签?

时间:2016-11-29 07:48:03

标签: git git-tag

如何锁定现有的git标签?

目的是使发布标记不可移动,并防止其他人删除远程存储库中的发布标记。我尝试了git tag -a tag_name,但标签仍然被删除。

3 个答案:

答案 0 :(得分:1)

在(本地)存储库中,没有任何内容可以防止删除。您可以删除几乎任何内容:分支,提交和标记。您甚至可以通过删除文件夹来删除整个存储库。 Git中没有任何东西可以甚至试图阻止这种情况。毕竟,它是你的存储库,所以你可以随心所欲地做任何事情。

将远程存储库添加到该等式后,情况会有所不同。同样,本地存储库不能阻止您删除远程存储库上的内容(并且您不希望本地存储库负责保护远程数据库)。所以Git允许你推送任何东西,即使这意味着远程存储库确实丢失了一些信息(通过主动删除东西或用其他东西覆盖它)。

远程存储库本身也没有保护。 Git本身在其远程存储库交互协议中没有任何访问管理。所以你需要的是第三方对这些东西负责。对于自托管存储库,Gitolite几乎是 解决方案。它支持非常细粒度的权限模型,您可以为几乎所有用例添加规则和例外。特别是,它允许您保护分支和标签免受(有害)修改。

如果您不是自托管的,那么您需要与您的提供商一起寻找保护选项。例如,GitHub支持受保护的分支,它允许您阻止对这些分支的强制推送。不幸的是,它没有标签功能,所以你仍然可以强制推送标签。 BitBucket具有更灵活的分支权限功能,这也允许模式。您可以使用该模式指定标签,但我真的不确定它。

但一般而言,您无法真正保护您的存储库不会删除标记。如果有任何帮助,如果您注意到标签被更改或删除,您可以随时强制推送本地标签,将状态重置为原样。

答案 1 :(得分:0)

如果您有共享的中央存储库,则可以在此中央存储库上设置pre-receive挂钩,以拒绝任何可以修改现有标记的推送。

如果你使用一些活跃的git服务器(例如:gitolite),你可以在每个用户拥有的访问权限中强制执行这种规则。

答案 2 :(得分:-1)

您可以对代码进行签名。

请参阅签名标记的文档: Git Tools - Signing Your Work