Git初始推送失败,接收钩被拒绝

时间:2019-02-22 16:01:17

标签: git

我拉出了一个存储库,并清理了无关的零件。在本地,一切都很完美。我想保留以前回购中的历史记录。

然后我创建了另一个存储库,一个干净的存储库。但是由于pre-receive hook declined

,推送失败

我很确定我的存储库中没有这种东西:)

我尝试了--force-with-lease之类的一些命令,但是没有运气。

这里可能是问题,我从中提取的以前的存储库有问题吗?

git push --verbose --set-upstream origin Last-backup:pushed-from-different-repo --force-with-lease
Pushing to git@gitlab.localhost:tkcn/history-recovery.git
Enter passphrase for key '---/.ssh/id_rsa':
Counting objects: 415402, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (129955/129955), done.
Writing objects: 100% (415402/415402), 78.71 MiB | 271.00 KiB/s, done.
Total 415402 (delta 229277), reused 411834 (delta 226634)
remote: Resolving deltas: 100% (229277/229277), done.
remote: Checking connectivity: 415402, done.
remote: GitLab: Push operation timed out
remote:
remote: Timing information for debugging purposes:
remote: Running checks for ref: pushed-from-different-repo
remote: Checking if you are allowed to push... (5.83ms)
remote: Checking if default branch is being deleted... (0.12ms)
remote: Scanning repository for blobs stored in LFS and verifying their files have been uploaded to GitLab... (25.63ms)
remote: Checking if branch follows the naming patterns defined by the project... (3.38ms)
remote: Validating diff contents... (cancelled after 41262.16ms)
To gitlab.localhost:tkcn/history-recovery.git
 ! [remote rejected]       Last-backup -> pushed-from-different-repo (pre-receive hook declined)
error: failed to push some refs to 'git@gitlab.localhost:tkcn/history-recovery.git'

git子树拆分和git filter-branch --prune-empty无效,因为文件夹在历史记录中移动了几次。

关于stackoverflow的最合适的解决方案看起来像https://stackoverflow.com/a/14764368/559873 但是,我无法在Windows计算机上运行它。

3 个答案:

答案 0 :(得分:3)

预接收钩子是在远程git服务器(gitlab,github或任何git服务器)上执行的,而不是在您克隆了git存储库的工作站/服务器上执行的(请勿与pre混淆) -commit hooks,pre-commit hooks脚本是在您提交克隆的仓库之前执行的,它们位于YOUR_REPO / .git / hooks /)

基本上,您要在其中推送项目的git远程服务器(使用github语言的repo)都启用了预提交钩子,该钩子通常是由组的所有者/管理员故意设置的(等同于组织)在GitHub中),以确保任何推送事件都遵循特定的质量检查。

已编辑

如果您注意git push的push错误的详细程度,您会看到已通过了多个检查步骤,例如分支名称等,但由于验证diff部分花费的时间超过了超时,所以它失败了。 / p>

remote: Validating diff contents... (cancelled after 41262.16ms)

您还可以联系您的项目/仓库所在的组(组织)的管理员,以获取有关预接收挂钩预期进行的质量检查的更多详细信息

答案 1 :(得分:0)

运行垃圾回收后,我能够成功推送。

AsynchronousFileChannel

答案 2 :(得分:0)

检查您的 remote.origin.url 正在使用什么 git config --list。我的问题是我的 remote.origin.url 被设置为 git https://oauth2:gitAccessToken@gitlab.com/.../user.git。显然它最后不需要“.git”,但我是从 Gitlab 的下拉克隆选项中复制和粘贴的。一旦我使用 git remote set-url origin <repository-url> 正确重置了我的 remote.origin.url,它就起作用了!