我有一个带子模块的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.
我没有解决这个问题。
我该怎么做才能让它发挥作用?
答案 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