我已设置以下收件后:
$ cat .git/hooks/post-receive
#!/bin/env sh
git checkout -f
可执行:
$ l .git/hooks/post-receive
-rwx--x--x 1 nils nils 30 11. Jan 13:17 .git/hooks/post-receive
因此,当我从本地计算机进入它时,它应该结帐并进行我在本地进行的更改。但事实并非如此:
本地:
$ cat > testfile
hello world
$ git add testfile && git commit -m "added testfile" && git push production master
[master 9f5232d] added testfile
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 testfile
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://[…]/
88ce501..9f5232d master -> master
然后在远程机器上:
$ git status --short
D testfile
因此它的工作树中没有测试文件
$ git checkout -f
$ git status
# On branch master
nothing to commit (working directory clean)
任何想法可能出错?
答案 0 :(得分:2)
您应该设置GIT_WORK_TREE以确保在正确的位置完成结帐:
#!/bin/env sh
GIT_WORK_TREE=/var/www/website.org git checkout -f
不要忘记chmod +x
脚本,并确保用户推送有权运行checkout命令。