不能在git post-update hook中调用“git reset”?

我为我的网页设置了一个git仓库(这是简单的HTML,由Pandoc降价生成)。 版本库将仅由我进行远程更新,并已成功configuration为使用HTTPS。

现在,这不是一个纯粹的存储库 – 没有人会更新服务器上的本地存储库或工作树,所以我只是在那里保留一个工作副本,并使其可供Web服务器发布。

这一切工作正常, – 我需要工作树自动更新每次我推动更改到服务器,所以我写了以下post-update脚本(在这个例子中,工作树在/path/git/me/path/git/me/.git的存储库):

 #!/bin/bash (cd /path/git/me/ && echo "running git reset --hard on `pwd`" && git reset --hard) (cd /path/git/me/ && pandoc -s -o index.html index.md) 

当我运行git push ,钩子被执行了,但是真的发生了一些奇怪的事情:

  • git抱怨说'.' 不是一个仓库,不运行git reset --hard命令
  • 然而,pandoc运行没有问题!

以下是推送的logging:

 $ GIT_TRACE=1 git push 12:21:12:21:27.088581 run-command.c:347 trace: run_command: 'git-remote-https' 'origin' 'https://server.org/git/me' Username for 'https://server.org': me Password for 'https://[email protected]': 12:21:32.624468 run-command.c:347 trace: run_command: 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin' 12:21:32.627833 exec_cmd.c:128 trace: exec: 'git' 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin' 12:21:32.633026 git.c:348 trace: built-in: git 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin' 12:21:32.634024 run-command.c:347 trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress' 12:21:32.634538 exec_cmd.c:128 trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress' 12:21:32.636701 git.c:348 trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress' Counting objects: 2, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 223 bytes | 0 bytes/s, done. Total 2 (delta 1), reused 0 (delta 0) remote: running git reset --hard on /path/git/me remote: fatal: Not a git repository: '.' To https://server.org/git/me 93be2f2..9cc7a28 master -> master 

我在这里做了什么错误,我怎样才能按预期运行命令?

我发现了这个问题!

在钩子执行期间,variablesGIT_DIRGIT_WORK_TREE被设置,git将忽略当前目录。 而且,我似乎可以将目录明确地传递给git:

 git --git-dir /path/git/me/.git --work-tree /path/git/me/ reset --hard 

一切正常!