我是git的新手,所以如果我在这里滥用术语,我会道歉(请纠正我),但我会尽我所能。
我正在尝试在Web服务器上设置一个裸git repo(hub)和一个开发站点工作副本(prime)。我试过在this article之后设计它。我希望每当推送集线器repo时都要更新开发工作副本。我的印象是,正确的钩子是post-update
,我已经创建了这样:
#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET
当我将更改从本地存储库推送到裸集线器时,我从更新后的脚本中获得以下输出:
remote: sites
remote: fatal: Not a git repository: '.'
但是,如果我以用户“站点”的身份SSH进入服务器并手动执行此脚本,那么对于此挂钩或脚本可能出错的任何想法都会很有效吗?
答案 0 :(得分:163)
这是最终有效的脚本。我认为我最初失踪的那个阻止它远程工作的是unset GIT_DIR
#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch
exec git-update-server-info
答案 1 :(得分:27)
尝试改为:
#!/bin/sh
cd /path/to/working-copy/
env -i git pull
答案 2 :(得分:0)
尽管如此 取消GIT_DIR 只是工作。
在其他地方错误地设置GIT_DIR时会出现问题。
你可以添加它: GIT_DIR =的.git / 它会起作用
答案 3 :(得分:0)
在我的情况下,我已经指定了一个工作树,这打破了一些命令,如pull
(或者更确切地说是fetch
)。
要取消设置工作树,如果它在你的git配置中是通过:
git config --unset core.worktree
(还有其他设置工作树的方法)
除非您自己首先使用自定义工作树在自己周围挖洞,否则不会有任何变化。
这对我来说意味着git内部在某些情况下使用相对于工作树+ .git/
的路径。根据我的经验,除了git的最基本部分之外,工作树没有得到很好的支持。我没有彻底地进行过实验,如果我设置了git目录配置变量是正确的,我没有玩过,Git可能会表现得很好。
答案 4 :(得分:-1)
您可能有权限问题。我不确定您是如何设置裸git repo的,但如果它在git
用户下运行,请确保允许git
用户在项目目录中执行git pull
可选择尝试此操作以找出运行挂钩时的用户:
echo `whoami`