2011-06-17 77 views
13

我有一个中央裸仓库,其中一个团队发布(推送)它们的提交。 在这个主存储库中,我想禁用标记删除和重命名。禁用标记删除

有没有解决方案像钩子什么的?

回答

18

git help hooks包含有关挂钩的文档。当Git即将创建/移动/删除引用时,会调用update钩子。这就是所谓的每基准一次更新,并给出:

  • 第一个参数:引用名(例如,参考文献/标签/ 1.0)
  • 第二个参数:对象的SHA1其中参考当前点(如果参考当前不存在,全零)
  • 第三个参数:用户希望参考点的对象的SHA1(如果参考被删除,全部为零)。

如果钩子以非零退出代码退出,git将不会更新引用,并且用户将收到错误。

因此,要解决您的特定问题,您可以添加以下到您的update钩:

#!/bin/sh 

log() { printf '%s\n' "$*"; } 
error() { log "ERROR: $*" >&2; } 
fatal() { error "$*"; exit 1; } 

case $1 in 
    refs/tags/*) 
     [ "$3" != 0000000000000000000000000000000000000000 ] \ 
      || fatal "you're not allowed to delete tags" 
     [ "$2" = 0000000000000000000000000000000000000000 ] \ 
      || fatal "you're not allowed to move tags" 
     ;; 
esac 
+1

你可能想链接到文档或更多地解释这是如何整合。 – Daenyth

+0

@Daenyth:更新,谢谢! –

+0

更好,+1! – Daenyth