git - 使用 Git 自动部署 - 无法运行接收后 Hook

标签 git ubuntu vps githooks

我使用/var/repo/myrepo.git 创建了一个存储库

git init --bare

以及一个带有内部的 post-receive 钩子(Hook):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/myrepo.git checkout -f

然后:

chmod +x post-receive

现在,从本地推送到远程工作正常,我知道这一点,因为我可以在中看到我的本地分支

/var/repo/myrepo.git/refs/heads

但问题是钩子(Hook)不起作用。

然后如果我从终端运行:

git --work-tree=/var/www/domain.com --git-dir=/var/repo/myrepo.git checkout -f

存储库中的所有文件都复制到/var/www/domain.com

那么为什么钩子(Hook)不起作用,但如果从 bash 执行,里面的命令却起作用?

UPDATE_1

按照建议,在/var/repo/myrepo.git/hooks/post-receive中我正在使用:

git --work-tree=/var/www/domain.com --git-dir=/var/repo/myrepo.git checkout -f >/tmp/mylogfile 2>/tmp/mylogfile

该文件是可执行的,因为我可以使用以下命令运行它:

./post-receive

这将按预期复制我的警告目录中的所有存储库文件,但文件“/tmp/mylogfile”是空的。

最佳答案

如果 hooks/post-receive 不起作用,并且您已将文件正确设置为可执行文件,并且您会看到以下消息:

Everything up-to-date

可能是因为您的推送没有新的变化。因此,更改文件并提交并再次推送。

如果您看到此消息:

remote: fatal: You are on a branch yet to be born

您可以通过先推送主分支,然后再推送所需的分支来解决此问题:

git push serverRemote master

此后,工作树目录中的文件将成为主分支文件。如果您想在每次推送后使用所需的分支文件更新文件,则必须从服务器中的裸存储库 check out 所需的分支(您必须在命令中输入工作树目录):

git --work-tree=/path/to/work/tree checkout yourDesiredBranch

关于git - 使用 Git 自动部署 - 无法运行接收后 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693239/

相关文章:

git - 择优 merge 在此方案中是否合适?

git - 防止 CSV 文件的 EOL 规范化

react-native - 我在 ubuntu 19 上安装 watchman 时遇到错误,有人可以给我一个解决方案吗?

c++ - 管道 ppm 图像到 eog 图像查看器不起作用

PHP 警告 : call_user_func_array() expects parameter 1 to be a valid callback, 函数 'remove_wpcf7' 未找到或函数名称无效

PHP-FPM 进程导致 VPS 上 CPU 使用率高

git - yarn 发布失败,因为 dist 文件夹已添加到 gitignore

git - 如何在 Gitlab 服务器中记录所有用户的 git 命令( pull/克隆/推...)?

bash - 跳过 sed 中的模式

php -/usr/bin/php 上的资源使用过多处理时间