2016-11-29 66 views
0

如何锁定现有的git标签?如何锁定现有的git标签?

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

+0

您可能可以通过钩子q.v.强制执行此操作。 [这里](http://stackoverflow.com/questions/6390966/disable-tag-deletion)。 –

+2

标签可以像分支,提交一样被删除,实际上任何东西都可以被删除。如果您想避免这种情况,请设置服务器拒绝这些更改(类似地,您将如何设置为拒绝强制推送)。 – poke

+1

[禁用标记删除]的可能重复(http://stackoverflow.com/questions/6390966/disable-tag-deletion) –

回答

0

如果您有共享的中央回购站,您可以在此中央回购站上设置一个pre-receive挂钩,以拒绝任何将修改现有标签的推送。

如果您使用某个活动的git服务器(例如:gitolite),则可以在每个用户具有的访问权限中强制执行这种类型的规则。

-1

您可以对标签进行签名。

见签署标签的文档: Git Tools - Signing Your Work

+0

似乎仍然可以删除已签名标记,对不对?为什么我仍然可以删除特定标签 – ElvisHuang

+0

如果是这样,您还应该添加预接收钩子以防止删除或移动现有标签。我仍然建议使用签名标签 – yorammi

1

在一个(本地)仓库,没有什么保护,以防止删除。你几乎可以删除任何东西:分支,提交和标签。您甚至可以通过简单地删除文件夹来删除整个存储库。 Git中没有任何东西可以甚至试图阻止这种情况。毕竟,它是你的存储库,所以你可以做任何你想要的。

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

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

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

一般来说,你不能真正保护你的版本库,以免被删除标签。如果有任何帮助,如果您发现标签被更改或删除,您可以随时强制将您的本地标签重新插入,以将状态重置为原来的状态。