【发布时间】:2012-05-17 11:41:52
【问题描述】:
我的服务器上有一个非裸存储库(目录 /home/andrew/web 和 /home/andrew/web/.git),将 receive.denyCurrentBranch 设置为忽略并创建 post-receive 钩子:
#!/bin/sh
GIT_WORK_TREE=/home/andrew/web git checkout -f
当我运行 sh .git/hooks/post-receive 时,一切正常。但是当我从我的电脑推送时,我收到了这个错误:
remote: fatal: Not a git repository: '.'
有什么办法可以解决这个问题吗?最终无需切换裸仓库?
谢谢
编辑:这是我的新接收后挂钩。接受的答案中已经描述了为什么会这样。
echo "\nChecking out $PWD"
GIT_DIR=/home/andrew/web/.git
GIT_WORK_TREE=/home/andrew/web git checkout -f
【问题讨论】:
-
你使用什么命令来推送,特别是:远程 url 是什么?
-
@Simon 我使用“git push origin”,我的远程 URL 是“andrew@example.com:web”。
-
您可以尝试完整路径
andrew@example.com:/home/andrew/web,但我认为真正的问题是您的远程仓库不是裸露的。您可以尝试强制推送:git push -f origin -
好的,所以我再次尝试了裸仓库,这是一场艰苦的斗争。我有 web.git/ 但想将文件放在 web/ 中 - 我尝试设置“git config core.worktree /home...web/”,但随后它抱怨说使用 worktree 毫无意义。我还尝试在 web/ 目录中创建一个“ln -s /home...web.git .git”,但是如果我在 web/ 和 web.git/ 中键入“git log”,我看不到web/中的最新提交。有没有办法做到这一点?
标签: git