Git 推送错误预接收挂钩被拒绝
Git push error pre-receive hook declined
我在虚拟机上有 运行 gitlabhq rails 服务器,按照本教程中的 1-6 个步骤 https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md 并启动 rails 服务器执行命令 sudo -u git -H bundle exec rails s -e production
.之后我创建了用户,使用管理工具并在该用户下创建了新项目。然后我一如既往地尝试将现有项目推送到此回购协议。但在最后一步,git push origin master
失败并显示错误
[remote rejected] master -> master (pre-receive hook declined)
附加信息:
1) 我还没有通过电子邮件激活 link 激活用户(项目所有者),因为我还没有在服务器端配置 post 服务,而且我没有找到如何操作的说明在本手册中做到这一点。
2) Gitlab 服务器生成如何将项目推送到 repo 的提示,并且路径中没有 repositories/
。我的意思是它生成 git@mygitlabhost:user/repo.git
而不是 git@mygitlabhost:repositories/user/repo.git
这是正确的。
3) 当我尝试调试它时,我在服务器上的 repo 中打开 pre-receive
脚本并尝试输出变量(其中有 3 个):refs = ARGF.read
、key_id = ENV['GL_ID']
和 repo_path = Dir.pwd
并发现 key_id 总是空的。也许问题出在这里......如果是这样,请给我有关如何解决该问题的建议。谢谢
您需要将您的 ssh 密钥添加到您的 git 帐户,如果它抛出错误然后删除以前的 ssh 密钥并创建一个新的 ssh 密钥然后添加。
似乎问题出在某些服务上,例如 sidekiq。 运行 sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
输出配置的所有问题。
GitLab 默认将 master
分支标记为 protected
(参见 https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ 中的部分 Protecting your code
为什么)。如果您的情况是这样,那么这会有所帮助:
Open your project > Settings > Repository and go to "Protected branches", find "master" branch into the list and click "Unprotect" and try again.
通过https://gitlab.com/gitlab-com/support-forum/issues/40
对于 8.11 及更高版本 操作方法在这里:https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users
您可能没有项目或 master 分支的开发人员访问权限。您需要开发访问权限才能推动新工作。
新工作意味着新的分支和提交。
可能并非如此,但这是我的“pre-receive hook declined”错误的解决方案:
有些存储库只允许通过 拉取请求 进行修改。这意味着您必须
- 创建一个新分支,以要将更改推送到的分支为基础。
- 提交并将您的更改推送到新分支。
- 打开合并请求以将您的分支与原始分支合并。
Following resolved problem in my local machine:
一个。首先,确保您使用正确的登录详细信息连接到 Bitbucket Server(即属于您的 username/password/SSH 密钥)
乙。然后,确保 name/email 地址在您的本地 Git 配置中正确设置:为您尝试推送的帐户设置本地 Git 配置(检查断言您是提交文件的人)
* 请注意,姓名和电子邮件地址均区分大小写
* 它也是 space 敏感的 - 一些公司帐户的名称中有额外的 spaces/characters,例如。 “Contractor/ space space(LDN)
”。您必须在配置中包含与 Bitbucket Server 相同数量的 space。如果卡住,请在记事本中检查。
C。如果您使用了错误的帐户,只需切换您的帐户凭据(username/password/SSH 键)并再次尝试推送。
D.否则,如果您的本地配置不正确,您将需要修改它
For MAC
open -a TextEdit.app ~/.gitconfig
注意:您必须修复您尝试推送的旧提交。
修改您的最后一次提交:
> git commit --amend --reset-author
<save and quit the commit file text editor that opens, if Vim then
:wq to save and quit>
尝试重新推送您的提交:
> git push
我通过在 .git/config
中将 remote 'origin' url
从 http
更改为 git
协议解决了这个问题
转到项目设置 --> 挂钩 -->(下)Pre-receive 挂钩
禁用
cp 需要在提交中引用问题
就我而言,我的团队领导创建了一个回购协议(回购协议为空)并将我指定为 开发人员 所以当我直接推送代码以掌握错误时,我是面对 ! [remote rejected] master -> master (pre-receive hook declined)
所以他分配给我作为 maintainer 是如何解决的,所以我能够将代码直接推送给 master。
我在使用 BitBucket 时偶然发现了同样的错误。我有一个本地 Git 存储库,我想在线备份,所以我从我的 BitBucket 帐户(使用网络界面)创建了一个新存储库。
运行git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git
后,我运行git push origin master
无用(我一般不用-u 选项 git push
因为我不介意在推拉时输入完整的 repo 和 b运行ch 名称)。
错误读取:
remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'
但是当我 运行 git push -u origin master
(严格按照 BitBucket 的说明)时,我的本地 b运行ch 确实被成功推送了。
我觉得很奇怪,因为 -u (--set-upstream
) 无论如何应该只 "add upstream (tracking) reference..."。
我已经按照 heroku 日志的说明进行操作 img https://devcenter.heroku.com/articles/buildpacks#detection-failure(使用 cmd:heroku 日志 -> 显示您的错误)
然后执行命令:"heroku buildpacks:clear"。终于,它对我有用!
我遇到了同样的问题,这是因为我直接在master分支中推送我的代码,我没有权限。所以我将我的代码推送到一个新的分支中,然后我创建了一个 pull request 以与 master 合并。
尽管这个问题是特定于 gitlab 的,但在 github 上可能会发生类似的错误,具体取决于它的设置方式(通常是 Github Enterprise) .
您需要熟悉以下概念:
- 预接收挂钩
- 组织 webhooks
- 网络钩子
Webhooks 比其他两项更容易理解。
预接收挂钩
are scripts that run on the GitHub Enterprise server
to enforce policy. When a push occurs, each script runs in an
isolated
environment
to determine whether the push is accepted or rejected.
组织网络挂钩:
Webhook 事件也会从您的存储库发送到您的“组织 webhook”。 more info.
这些是在您的 github 企业中设置的。它们特定于 github 企业 的版本。
由于您的访问限制(开发人员、维护人员、管理员等),您可能看不到任何人。
请检查 JIRA 状态是否处于“开发中”。
对我来说,不是,当我将 jira 状态更改为“开发中”时,它对我有用。
请尝试:
git push -u origin master
如果仍然无法推送成功,请创建一个新分支或选择其他分支并在新分支上推送
这是因为Master分支被保护了,这里是清除这个错误的步骤。
- 在你的主分支中创建一个分支
git checkout -b new-branch-name
- 推送新分支
git push --set-upstream origin new-branch-name
- 现在远程合并分支到master。
- 合并后,重置本地master分支
git reset --soft HEAD~1
- 终于
git pull
我在使用 Bitbucket 时遇到了同样的问题。
推送时,错误是“提交消息与正则表达式不匹配**”。
已转到 'Settings' > 'Hooks' > 启用 'Yet another commit checker' 选项。
它开始工作了!!
我曾因为 AWS 损坏而经历过这种情况。
要排除这种情况,只需检查邮件是否包含类似于
的内容
<head><title>504 Gateway Time-out</title></head>
因此,如果您之前没有做过任何可疑的事情,只是开始看到这个 - 它可能只是服务器超时。
如果您遇到类似
的问题
! [远程拒绝] master -> master (pre-receive hook declined)
因为master被保护了,你可以做2步
要取消保护,请按照以下步骤操作 –
转到项目设置。
单击存储库选项卡。
打开受保护的分支。
找到您的 master 分支并单击取消保护。
否则
我们可以将分支从 master 切换到 main
git checkout -b main
git branch -D master
git push heroku main
愉快的黑客攻击!!!
TL;DR 重命名项目并复制所有更改。
我几乎尝试了此页面上的所有答案。
最后我通过这样做修复了它:
- 正在将我的项目重命名为
project-tmp
- 再次将项目克隆到
project
- 手动将我的所有更改从
project-tmp
移动到 project
(显然没有复制到 .git
文件夹)。
git add .
git commit -m 'Blah blah'
git push
成功了!
为什么这有效?
我的理论是,在某个提交(或某事)的某处有一个糟糕的设置搞砸了。
Git LFS
我做的另一件事是 setup git lfs。我不确定这是否重要。
对我来说有两种可能的情况:
- 分支被保护,您无权推送(查看您的git用户的角色)
- 允许强制推送在该分支上被禁用,您可能正在尝试强制推送。
我在虚拟机上有 运行 gitlabhq rails 服务器,按照本教程中的 1-6 个步骤 https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md 并启动 rails 服务器执行命令 sudo -u git -H bundle exec rails s -e production
.之后我创建了用户,使用管理工具并在该用户下创建了新项目。然后我一如既往地尝试将现有项目推送到此回购协议。但在最后一步,git push origin master
失败并显示错误
[remote rejected] master -> master (pre-receive hook declined)
附加信息:
1) 我还没有通过电子邮件激活 link 激活用户(项目所有者),因为我还没有在服务器端配置 post 服务,而且我没有找到如何操作的说明在本手册中做到这一点。
2) Gitlab 服务器生成如何将项目推送到 repo 的提示,并且路径中没有 repositories/
。我的意思是它生成 git@mygitlabhost:user/repo.git
而不是 git@mygitlabhost:repositories/user/repo.git
这是正确的。
3) 当我尝试调试它时,我在服务器上的 repo 中打开 pre-receive
脚本并尝试输出变量(其中有 3 个):refs = ARGF.read
、key_id = ENV['GL_ID']
和 repo_path = Dir.pwd
并发现 key_id 总是空的。也许问题出在这里......如果是这样,请给我有关如何解决该问题的建议。谢谢
您需要将您的 ssh 密钥添加到您的 git 帐户,如果它抛出错误然后删除以前的 ssh 密钥并创建一个新的 ssh 密钥然后添加。
似乎问题出在某些服务上,例如 sidekiq。 运行 sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
输出配置的所有问题。
GitLab 默认将 master
分支标记为 protected
(参见 https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ 中的部分 Protecting your code
为什么)。如果您的情况是这样,那么这会有所帮助:
Open your project > Settings > Repository and go to "Protected branches", find "master" branch into the list and click "Unprotect" and try again.
通过https://gitlab.com/gitlab-com/support-forum/issues/40
对于 8.11 及更高版本 操作方法在这里:https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users
您可能没有项目或 master 分支的开发人员访问权限。您需要开发访问权限才能推动新工作。
新工作意味着新的分支和提交。
可能并非如此,但这是我的“pre-receive hook declined”错误的解决方案:
有些存储库只允许通过 拉取请求 进行修改。这意味着您必须
- 创建一个新分支,以要将更改推送到的分支为基础。
- 提交并将您的更改推送到新分支。
- 打开合并请求以将您的分支与原始分支合并。
Following resolved problem in my local machine:
一个。首先,确保您使用正确的登录详细信息连接到 Bitbucket Server(即属于您的 username/password/SSH 密钥)
乙。然后,确保 name/email 地址在您的本地 Git 配置中正确设置:为您尝试推送的帐户设置本地 Git 配置(检查断言您是提交文件的人)
* 请注意,姓名和电子邮件地址均区分大小写
* 它也是 space 敏感的 - 一些公司帐户的名称中有额外的 spaces/characters,例如。 “Contractor/ space space(LDN)
”。您必须在配置中包含与 Bitbucket Server 相同数量的 space。如果卡住,请在记事本中检查。
C。如果您使用了错误的帐户,只需切换您的帐户凭据(username/password/SSH 键)并再次尝试推送。
D.否则,如果您的本地配置不正确,您将需要修改它
For MAC
open -a TextEdit.app ~/.gitconfig
注意:您必须修复您尝试推送的旧提交。
修改您的最后一次提交:
> git commit --amend --reset-author <save and quit the commit file text editor that opens, if Vim then :wq to save and quit>
尝试重新推送您的提交:
> git push
我通过在 .git/config
remote 'origin' url
从 http
更改为 git
协议解决了这个问题
转到项目设置 --> 挂钩 -->(下)Pre-receive 挂钩
禁用 cp 需要在提交中引用问题
就我而言,我的团队领导创建了一个回购协议(回购协议为空)并将我指定为 开发人员 所以当我直接推送代码以掌握错误时,我是面对 ! [remote rejected] master -> master (pre-receive hook declined)
所以他分配给我作为 maintainer 是如何解决的,所以我能够将代码直接推送给 master。
我在使用 BitBucket 时偶然发现了同样的错误。我有一个本地 Git 存储库,我想在线备份,所以我从我的 BitBucket 帐户(使用网络界面)创建了一个新存储库。
运行git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git
后,我运行git push origin master
无用(我一般不用-u 选项 git push
因为我不介意在推拉时输入完整的 repo 和 b运行ch 名称)。
错误读取:
remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'
但是当我 运行 git push -u origin master
(严格按照 BitBucket 的说明)时,我的本地 b运行ch 确实被成功推送了。
我觉得很奇怪,因为 -u (--set-upstream
) 无论如何应该只 "add upstream (tracking) reference..."。
我已经按照 heroku 日志的说明进行操作 img https://devcenter.heroku.com/articles/buildpacks#detection-failure(使用 cmd:heroku 日志 -> 显示您的错误) 然后执行命令:"heroku buildpacks:clear"。终于,它对我有用!
我遇到了同样的问题,这是因为我直接在master分支中推送我的代码,我没有权限。所以我将我的代码推送到一个新的分支中,然后我创建了一个 pull request 以与 master 合并。
尽管这个问题是特定于 gitlab 的,但在 github 上可能会发生类似的错误,具体取决于它的设置方式(通常是 Github Enterprise) .
您需要熟悉以下概念:
- 预接收挂钩
- 组织 webhooks
- 网络钩子
Webhooks 比其他两项更容易理解。
预接收挂钩
are scripts that run on the GitHub Enterprise server to enforce policy. When a push occurs, each script runs in an isolated environment to determine whether the push is accepted or rejected.
组织网络挂钩:
Webhook 事件也会从您的存储库发送到您的“组织 webhook”。 more info.
这些是在您的 github 企业中设置的。它们特定于 github 企业 的版本。 由于您的访问限制(开发人员、维护人员、管理员等),您可能看不到任何人。
请检查 JIRA 状态是否处于“开发中”。 对我来说,不是,当我将 jira 状态更改为“开发中”时,它对我有用。
请尝试:
git push -u origin master
如果仍然无法推送成功,请创建一个新分支或选择其他分支并在新分支上推送
这是因为Master分支被保护了,这里是清除这个错误的步骤。
- 在你的主分支中创建一个分支
git checkout -b new-branch-name
- 推送新分支
git push --set-upstream origin new-branch-name
- 现在远程合并分支到master。
- 合并后,重置本地master分支
git reset --soft HEAD~1
- 终于
git pull
我在使用 Bitbucket 时遇到了同样的问题。
推送时,错误是“提交消息与正则表达式不匹配**”。
已转到 'Settings' > 'Hooks' > 启用 'Yet another commit checker' 选项。
它开始工作了!!
我曾因为 AWS 损坏而经历过这种情况。
要排除这种情况,只需检查邮件是否包含类似于
的内容<head><title>504 Gateway Time-out</title></head>
因此,如果您之前没有做过任何可疑的事情,只是开始看到这个 - 它可能只是服务器超时。
如果您遇到类似
的问题! [远程拒绝] master -> master (pre-receive hook declined)
因为master被保护了,你可以做2步
要取消保护,请按照以下步骤操作 –
转到项目设置。
单击存储库选项卡。
打开受保护的分支。
找到您的 master 分支并单击取消保护。
否则
我们可以将分支从 master 切换到 main
git checkout -b main
git branch -D master
git push heroku main
愉快的黑客攻击!!!
TL;DR 重命名项目并复制所有更改。
我几乎尝试了此页面上的所有答案。
最后我通过这样做修复了它:
- 正在将我的项目重命名为
project-tmp
- 再次将项目克隆到
project
- 手动将我的所有更改从
project-tmp
移动到project
(显然没有复制到.git
文件夹)。 git add .
git commit -m 'Blah blah'
git push
成功了!
为什么这有效?
我的理论是,在某个提交(或某事)的某处有一个糟糕的设置搞砸了。
Git LFS
我做的另一件事是 setup git lfs。我不确定这是否重要。
对我来说有两种可能的情况:
- 分支被保护,您无权推送(查看您的git用户的角色)
- 允许强制推送在该分支上被禁用,您可能正在尝试强制推送。