我有一个带有子模块的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.
我没有得到这个问题的解决方案。
我该怎么做才能让它发挥作用?
4条答案
按热度按时间mnemlml81#
如果重命名了路径,则可能会看到此错误(working-tree)。在我的例子中,我已经更新了
.gitmodules
中的路径,以匹配我的新路径,并认为我做得很好。但是当我稍后做git pull
时,它在旧路径中添加了新文件。这是因为有两个地方定义了模块路径。您还需要更新您的“working-tree”如X1 M2 N1 X文件中所定义的。关于this post上的工作树也有一些很棒的细节。
zpqajqem2#
当我在运行
git log
(使用!bash
命令)时,我在生成的shell中运行git submodule
时也遇到了同样的错误。同样让我困惑的是,如果使用sudo,我可以运行所有的git命令,而且这个问题影响了多个repos,而不仅仅是我运行git log
的那个。当然,解决方案是退出subshell和
git log
命令。cuxqih213#
我也偶然发现了这个问题,发现它是由我需要先cd到workdir引起的。我不知道为什么需要这样做,也许是git bug?你也可以通过
-C
传递路径,并将workdir设置为.
:我还注意到在我的plesk git用户界面(netcup.com)中变量似乎不起作用,我必须在这里指定没有变量的绝对路径:
waxmsbnn4#
供未来读者参考:如果您通过符号链接
cd
到您的repo文件夹,在Windows上也会发生这种情况,因为操作系统报告的工作目录与事实不符。