繁体   English   中英

得到“致命:不是git存储库:'。'”当使用更新后挂钩在另一个repo上执行'git pull'时

[英]getting “fatal: not a git repository: '.'” when using post-update hook to execute 'git pull' on another repo

我是git的新手,所以如果我在这里滥用术语,我会道歉(请纠正我),但我会尽我所能。

我正在尝试在Web服务器上设置一个裸git repo(hub)和一个开发站点工作副本(prime)。 我试过在这篇文章之后模仿它。 我希望每当推送集线器repo时都要更新开发工作副本。 我的印象是这个适当的钩子是post-update ,我创建的如下:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

更新

当我将更改从本地存储库推送到裸集中心时,我从更新后的脚本中获得以下输出:

remote: sites
remote: fatal: Not a git repository: '.'

但是,如果我作为用户'sites'以SSH方式连接到服务器并手动执行此脚本,那么它可以很好地解决这个钩子或脚本可能出错的问题吗?

这是最终有效的脚本。 我认为我最初失踪的那个阻止它远程工作的是未unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

尝试改为:

#!/bin/sh
cd /path/to/working-copy/
env -i git pull

尽管未设置的GIT_DIR正常工作。

当您在其他地方错误地设置GIT_DIR时会发生此问题。

你只需添加它:GIT_DIR = .git /它会起作用

在我的情况下,我已经指定了一个工作树,这打破了一些命令,如pull (或更准确地说是fetch )。

要取消设置工作树,如果它在你的git配置中是通过:

git config --unset core.worktree

(还有其他设置工作树的方法)

重要的是要注意,

除非您自己首先使用自定义工作树在自己周围挖洞,否则不会发生这种情况的变化。

嘲笑:

这对我来说意味着git内部在某些情况下使用相对于worktree + .git/路径。 根据我的经验,除了git的最基本部分之外,工作树没有得到很好的支持。 我还没有彻底地进行过实验,如果我设置了git目录配置变量正确的,我没有玩过,Git可能会表现得很好。

您可能有权限问题。 我不确定你是如何设置你的裸git repo,但如果它在git用户下运行,请确保允许git用户在你的项目目录中执行git pull

(可选)尝试以查找挂钩运行时的用户:

echo `whoami`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM