当推送到我们共享的裸存储库(通过 ssh)时,提交后无法正常工作。
正如我在这里的许多线程中发现的那样,这很常见,并且它适用于同一服务器上的其他两个存储库,这让我发疯了。
#!/bin/sh
GIT_WORK_TREE=/ab/cd/staging git checkout -f
存储库本身与挂钩应检出的目录位于同一目录中
/ab/cd/barerepo
推送时,它不会将文件签出到预期的路径,但会给出以下错误消息:
Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
fatal: Could not jump back into original cwd
error: hooks/post-receive exited with error code 128
我找不到任何关于这意味着什么的信息。(据我所知,Google 只会从对 git 本身的贡献中提出提交)。所以我阅读并猜测并尝试了......</p>
- 另外在接收后挂钩中设置 GIT_DIR
- 使用 --git-dir=/ab/cd/barerepo --working-dir=/ab/cd/staging 重新初始化裸仓库
- 在 barerepo/config 中手动设置工作目录
- 将裸仓库设置为空白并提交
- 通过克隆设置裸仓库
现在配置看起来像这样
[core]
repositoryformatversion = 0
filemode = true
bare = true
但我也有这个(不费吹灰之力)
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
worktree = /ab/cd/staging
logallrefupdates = true
[receive]
denyNonFastforwards = true
我还在 post-receive 钩子中添加了第二行
echo "post-receive done" > updated.txt
它将文件写入裸存储库的目录。这对我来说很有意义,因为 GIT_DIR 似乎设置为“。”,这得到了我从另一个 SO 问题中得到的后接收片段的证实
echo Running $BASH_SOURCE
set | egrep GIT
echo PWD is $PWD
结果:
Running hooks/post-receive
GIT_DIR=.
PWD is /ab/cd/barerepo
那么如何让 git 跳回原来的 cwd(当前工作目录?)?仅供参考:我对 git 还很陌生,并且有一种愚蠢的感觉,我错过了一些明显的东西,但是没有找到关于这个特定错误消息的任何重要内容让我想知道。推本身工作正常,顺便说一句。