我有一个测试服务器和生产服务器,都运行带有 virtuamin 7 控制面板、LAMP 和 git 的 Ubuntu 20.04。
问题:
我当前的 git push 配置似乎是正确的。我没有收到任何错误...但最后,推送的文件实际上并没有出现在目标目录中,所以我很困惑。
我认为--work-tree
git 标志被忽略了,因此推送的文件永远不会被放到正确的位置
在我的/home/username/public_html/production-site.git/hooks/push-receiver.sh
bash 脚本中我有:
#!/bin/bash
#Set Receiving & Working directories
git --work-tree=/home/username/public_html --git-dir=/home/username/public_html/production-site.git checkout -f
可执行文件
username@admin:~/public_html/production-site.git$ stat hooks/push-receiver.sh
File: hooks/push-receiver.sh
Size: 165 Blocks: 8 IO Block: 4096 regular file
Device: fd04h/64772d Inode: 1970021 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1051/username) Gid: ( 1028/username)
Access: 2022-09-10 17:51:41.904111692 +0800
Modify: 2022-09-10 17:49:24.957850296 +0800
Change: 2022-09-10 17:49:37.122051612 +0800
Birth: -
测试端没有错误:
$ git remote -v
prodsite [email protected]:public_html/production-site.git (fetch)
prodsite [email protected]:public_html/production-site.git (push)
Ubuntu 20.04.5 LTS
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 551 bytes | 551.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To XXX.YY.XX.YY:/home/username/public_html/production-site.git
f251e56..9e7f4f3 master -> master
Branch 'master' set up to track remote branch 'master' from 'prodsite'.
最终结果...目标目录中没有实际文件
答案1
没有名为 的钩子push-receiver
。这也意味着没有名为 的钩子push-receiver.sh
:您的文件必须具有准确的钩子名称,不带任何扩展名。(唯一的例外是.exe
Windows 上的文件。)
您可以了解可用的钩子在 githooks 手册页中。有一个完全适合您的用例:push-to-checkout
。但是,我认为它不适用于裸存储库。您应该查看post-update
和post-receive
。