我已经为我的网页设置了一个 git 存储库(它是简单的 HTML,由 markdown 生成潘多克)。该存储库仅由我远程更新,并且我已成功将其配置为使用 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做运行无问题!
以下是推送的记录:
$ 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
我在这里做错了什么,以及如何让钩子按预期运行命令?
答案1
我找到问题了!
在执行钩子期间,变量GIT_DIR
和GIT_WORK_TREE
被设置,git 将忽略当前目录。而且我似乎可以将目录明确传递给 git:
git --git-dir /path/git/me/.git --work-tree /path/git/me/ reset --hard
现在一切正常!