Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 为什么我的预提交钩子在我提交时不运行_Git_Github - Fatal编程技术网

Git 为什么我的预提交钩子在我提交时不运行

Git 为什么我的预提交钩子在我提交时不运行,git,github,Git,Github,我的Github存储库中有下面的代码,我想阻止我的回购协议中的任何人直接提交给master,但它不起作用,怎么了,我错了 我已经在stack overflow和youtube上搜索过,试图找到关于这个问题的教程,但我没有任何运气 9 lines (6 sloc) 154 Bytes #!/bin/sh branch="$(git rev-parse --abbrev-ref HEAD)" if [ "$branch" = "master" ]; then echo "You can'

我的Github存储库中有下面的代码,我想阻止我的回购协议中的任何人直接提交给master,但它不起作用,怎么了,我错了

我已经在stack overflow和youtube上搜索过,试图找到关于这个问题的教程,但我没有任何运气

9 lines (6 sloc)  154 Bytes
#!/bin/sh

branch="$(git rev-parse --abbrev-ref HEAD)"

if [ "$branch" = "master" ]; then
  echo "You can't commit directly to master branch"
  exit 1
fi
我希望阻止用户直接提交给master 目前,他们能够提交给master


我的脚本肯定是可以执行的,但它仍然没有显示任何内容。如果这样一个钩子是本地执行的,请确保你的钩子在
预提交的
文件中
.git/hooks

它将适用于此特定回购协议,但应在您希望其有效的每个相关回购协议中引入



除了钩子之外,您可能还希望使用分支保护规则配置github,这样即使有人在本地提交master,他们也无法将这些提交推送到github。您甚至可以将其配置为需要一个pull请求才能将提交提交到master上。这比您的本地钩子更重要,因为这不是每个团队成员都可以选择的。您是否设置了可执行标志?我们是否确定您的文件名为
pre-commit
(无扩展名)并且位于目录
.git/hooks
?因此您的文件位于
钩子
,而不是
.git/hooks
。这就是你的问题。@SergioTulentsev是正确的,位置就是问题所在。为了避免您的下一个问题,不,没有简单的方法可以与所有团队成员共享这些钩子,他们每个人都必须将该钩子放入他们的
.git/hooks
文件夹中。您可以编写一个脚本将其放在那里,但每个团队成员都必须执行该脚本。除了挂钩之外,您可能还希望使用分支保护规则配置github,以便即使有人在本地主机上提交,他们也无法将这些提交推送到github。您甚至可以将其配置为需要一个pull请求才能将提交提交到master上。这比你的本地钩子更重要,因为这不是每个团队成员都可以选择的。