Git 服务器端挂钩不是 运行?
Git Server Side Hooks not running?
我是 Git 的服务器端挂钩的新手,我 运行 遇到了一个问题,似乎挂钩 运行 不在全部。我的 Git 回购是一个裸回购。
我只想从存储库中提取一个文件并将其写入其他地方的磁盘。我不需要整个存档。
在远程(原始)服务器上,我编写了此文件并将其粘贴在 /my/path/repo.git/hooks
。
#!/bin/sh
# For debugging
echo "HELLO" > /my/path/hello.txt
# Auto-deploy thefile.php to /my/path/ every time something is pushed to this repo
exec git -C /my/path/repo.git show master:thefile.php > /my/path/thefile.php
我已经验证了钩子的权限:
-rwxrwxr-x 1 webadmin webadmin 543 Jan 15 16:27 post-update
如果我手动 运行 我服务器上的脚本,使用 $ ./path/to/repo.git/hooks/post-update
,一切正常。 hello.txt
是和thefile.php
一起写的。
但是当我将我的本地仓库推送到 origin 时,什么都没有改变。我正在通过恢复最新的提交并推送它来测试我的推送。对于下一个测试,我放弃了还原提交并强制推送以将其从 origin/master
中删除。这样,每次我推送时都会有实际的提交和更改。出于绝望,我确实进行了一个带有任意更改的全新提交,但这没有任何区别。
我在 post-update
和 post-receive
中都尝试过这个钩子。两者似乎都不起作用。
非常感谢你们提供的任何见解。
首先,确保你正在推送你认为你是的裸仓库:在那个裸仓库中,在服务器上,做一个 git status
和一个 git log
,以确认提交你推的确实有。
其次,检查允许您推送到裸仓库的侦听器日志:SSH 或 HTTPS。
如果您没有 HTTP(S) 侦听器,请考虑添加一个用于测试:最简单的是 gitea (just one executable)
第三,检查服务器上Git的版本,以防它太旧。
OP DOOManiac adds
The 2nd part gave me a clue that led me to the real answer:
I was pushing via filesystem share (mapped network drive in Windows) and apparently those don't trigger hooks on the server as there is no listener.
Changed everything to use SSH and now its working. Thanks!
(On a side note, this also explains why my "git config noff
" policy was being ignored.)
我是 Git 的服务器端挂钩的新手,我 运行 遇到了一个问题,似乎挂钩 运行 不在全部。我的 Git 回购是一个裸回购。
我只想从存储库中提取一个文件并将其写入其他地方的磁盘。我不需要整个存档。
在远程(原始)服务器上,我编写了此文件并将其粘贴在 /my/path/repo.git/hooks
。
#!/bin/sh
# For debugging
echo "HELLO" > /my/path/hello.txt
# Auto-deploy thefile.php to /my/path/ every time something is pushed to this repo
exec git -C /my/path/repo.git show master:thefile.php > /my/path/thefile.php
我已经验证了钩子的权限:
-rwxrwxr-x 1 webadmin webadmin 543 Jan 15 16:27 post-update
如果我手动 运行 我服务器上的脚本,使用 $ ./path/to/repo.git/hooks/post-update
,一切正常。 hello.txt
是和thefile.php
一起写的。
但是当我将我的本地仓库推送到 origin 时,什么都没有改变。我正在通过恢复最新的提交并推送它来测试我的推送。对于下一个测试,我放弃了还原提交并强制推送以将其从 origin/master
中删除。这样,每次我推送时都会有实际的提交和更改。出于绝望,我确实进行了一个带有任意更改的全新提交,但这没有任何区别。
我在 post-update
和 post-receive
中都尝试过这个钩子。两者似乎都不起作用。
非常感谢你们提供的任何见解。
首先,确保你正在推送你认为你是的裸仓库:在那个裸仓库中,在服务器上,做一个 git status
和一个 git log
,以确认提交你推的确实有。
其次,检查允许您推送到裸仓库的侦听器日志:SSH 或 HTTPS。
如果您没有 HTTP(S) 侦听器,请考虑添加一个用于测试:最简单的是 gitea (just one executable)
第三,检查服务器上Git的版本,以防它太旧。
OP DOOManiac adds
The 2nd part gave me a clue that led me to the real answer:
I was pushing via filesystem share (mapped network drive in Windows) and apparently those don't trigger hooks on the server as there is no listener.
Changed everything to use SSH and now its working. Thanks!
(On a side note, this also explains why my "git config noff
" policy was being ignored.)