GIT错误:致命:如果没有工作树,则无法使用/ usr / libexec / git-core / git-submodule

时间:2018-02-13 13:09:05

标签: git git-submodules git-post-receive

我有一个带子模块的git repo。

我会在post-receive hook文件中使用:

git --git-dir="$GIT_DIR" --work-tree="$GIT_WORKDIR1" submodule update --init --recursive 

但是我收到以下错误:

remote: fatal: /usr/libexec/git-core/git-submodule cannot be used without a working tree.  

我没有解决这个问题。

我该怎么做才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

如果您重命名了git子模块的路径(工作树),则可能会看到此错误。在我的情况下,我更新了.gitmodules中的路径以匹配我的新路径,并认为我很好。但是当我在git pull之后,它在旧路径中添加了新文件。这是因为模块路径有两个定义的位置。您还需要更新.git/modules/{modulename}/config文件中定义的“工作树”。

this post上有关于工作树的一些很好的细节。

答案 1 :(得分:0)

在运行git submodule(使用git log命令生成的shell内运行!bash时,遇到了同样的错误。同样让我感到困惑的是,如果我使用sudo运行它们,我可以运行所有的git命令,而这个问题影响了多个存储库,不仅影响了我正在运行git log的存储库。

解决方案当然是退出子Shell和git log命令。

答案 2 :(得分:0)

我也偶然发现了这个问题,并发现了原因,因为我需要先进入工作目录cd。我不确定为什么要这样做,也许这是一个git bug?您也可以通过-C传递路径,并将工作目录设置为.

git --git-dir="$GIT_DIR" --work-tree=. -C "$GIT_WORKDIR1" submodule update --init --recursive

我还注意到,在我的plesk git用户界面(netcup.com)中,变量似乎不起作用,我必须在此处指定没有变量的绝对路径:

git --git-dir=/git/repo_name.git --work-tree=. -C /httpdocs/website submodule update --init --recursive