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

ego6inou  于 2023-02-14  发布在  Git
关注(0)|答案(4)|浏览(355)

我有一个带有子模块的git repo。
我会在接收后钩子文件中使用:

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.

我没有得到这个问题的解决方案。
我该怎么做才能让它发挥作用?

mnemlml8

mnemlml81#

如果重命名了路径,则可能会看到此错误(working-tree)。在我的例子中,我已经更新了.gitmodules中的路径,以匹配我的新路径,并认为我做得很好。但是当我稍后做git pull时,它在旧路径中添加了新文件。这是因为有两个地方定义了模块路径。您还需要更新您的“working-tree”如X1 M2 N1 X文件中所定义的。
关于this post上的工作树也有一些很棒的细节。

zpqajqem

zpqajqem2#

当我在运行git log(使用!bash命令)时,我在生成的shell中运行git submodule时也遇到了同样的错误。同样让我困惑的是,如果使用sudo,我可以运行所有的git命令,而且这个问题影响了多个repos,而不仅仅是我运行git log的那个。
当然,解决方案是退出subshell和git log命令。

cuxqih21

cuxqih213#

我也偶然发现了这个问题,发现它是由我需要先cd到workdir引起的。我不知道为什么需要这样做,也许是git bug?你也可以通过-C传递路径,并将workdir设置为.

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
waxmsbnn

waxmsbnn4#

供未来读者参考:如果您通过符号链接cd到您的repo文件夹,在Windows上也会发生这种情况,因为操作系统报告的工作目录与事实不符。

相关问题