有没有办法在GIT中locking分支?

我有一个locking从用户推送文件的存储库的想法,通过在GIT更新挂钩中有一个locking脚本,因为push只能识别用户标识而不是分支。 所以我可以locking只是locking一个目录的整个回购。

有没有办法在GIT中locking特定的分支?

还是有一种方法一个更新挂钩可以识别用户正在推送哪个分支和代码推到哪个分支?

被推送到的分支是更新挂钩的第一个参数。 如果你想locking分支myfeature推,这个代码(放在hooks/update )将做到这一点:

 #!/bin/sh # lock the myfeature branch for pushing refname="$1" if [[ $refname == "refs/heads/myfeature" ]] then echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "You cannot push to myfeature! It's locked" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" exit 1 fi exit 0 

更新挂钩,从文档:

该钩子为每个要更新的引用执行一次,并有三个参数:

  • 正在更新的参考的名称,
  • 旧的对象名称存储在ref中,
  • 并将新的对象名存储在ref中。

所以…是的,它确切地知道哪个分支被推送,并且可以简单地检查该参数并退出,如果不希望分支被推送到。

如果您想(智能地)在用户上传对象之前执行此操作,则可以使用预接收钩子:

这个钩子为接收操作执行一次。 它不需要任何参数,但是对于每个参考文件的更新,它会在标准input中接收一个格式的行:

<old-value> SP <new-value> SP <ref-name> LF

其中<old-value>是ref中存储的旧对象名称, <new-value>是要存储在ref中的新对象名称, <ref-name><ref-name>的全名。

(那些是空格和换行符)

像gitolite这样的工具,我相信这种function: http : //github.com/sitaramc/gitolite