git - Git pre-receive hook newRev 问题
问题描述
在执行 pre-receive 钩子时git show $newrev
显示 diff in$newRev
但是如果在执行pre-receive
钩子时我会去 repo 并执行相同的命令git show $newrev
,它将返回 error fatal: bad object {newRev}
。
Git 版本:2.22.0。在 Git 2.7.4git show
上,在 repo 中执行不会返回错误。
pre-receive hook script
何时git show
正常工作
#!/usr/bin/env bash
read oldrev newrev refname
git show $newrev
pre-receive hook script
git show
带睡眠并在 repo 中手动运行
#!/usr/bin/env bash
read oldrev newrev refname
sleep 999
cd /repo
git show ae435ae1f9de55620d306cc82799ff20870f4238
致命:坏对象ae435ae1f9de55620d306cc82799ff20870f4238
解决方案
经过调查,我了解到 Git in pre-receive
hook 创建了单独的临时目录,它收集有关提交的信息。例如临时目录名称是objects/incoming-GsAsa
.
pre-receive
但是 Git 只在钩子脚本中知道它,因为它正确设置GIT_OBJECT_DIRECTORY
和GIT_ALTERNATE_OBJECT_DIRECTORIES
环境。
因此,问题的答案是正确设置GIT_OBJECT_DIRECTORY
和GIT_ALTERNATE_OBJECT_DIRECTORIES
vars。
推荐阅读
- php - “警告:printer_draw_bmp():加载位图失败”上的 PHP 错误
- r - 将社区数据转换为素食套餐的宽格式
- python - 试图创造人工智能 - 一些 IF 语句没有捕捉到
- angularjs - 在 angularjs 控制器中从外部获取 POST 数据
- java - 在 Android 上创建一个同时包含 simple_list_item_1 和 simple_list_item_multiple_choice 的 ListView
- visual-studio - 根据操作系统位数自动启动 32 位/64 位?
- javascript - 与 DOM 首次交互时调用函数(点击桌面浏览器/点击移动浏览器)
- c# - 如何在 ASP 中始终保持会话变量的更新。网络MVC
- python - TypeError: a bytes-like object is required, not 'str' ,我应该怎么做才能修复它?
- php - UID 大于某个值的 imap_search