在推送到裸工作目录后,如何在工作树中初始化/更新git子模块?

时间:2011-09-16 15:04:57

标签: git git-submodules

我有一个带有附加工作树的git存储库,我正在推送到远程的裸仓库。 存储库包含一个子模块。

在远程端:我会将回购邮件签出到已设置git checkout -fGIT-DIR env vars的工作树GIT-WORK-TREE

在工作树中,我现在看到所有预期的文件和子模块的空目录('MySubmodule')。

然后我做了:

git submodule init
git submodule update

此错误的消息如下:

working tree '../../workTree/' already exists
Clone of 'git@github.com:user/MySubmodule.git' into submodule path 'MySubmodule' failed

空子模块目录现在也已从工作树中“消失”......

我不确定我在哪里出错了,基本上我只想查看子模块文件,就像'git submodule update'一样。

2 个答案:

答案 0 :(得分:1)

看起来当您运行“git submodule update”时无法设置GIT_WORK_TREE ...它会尝试将其用作子模块的工作树,而不是超级项目。

我必须在更新后的脚本更新服务器...

/usr/local/bin/git --git-dir="$PROJECT_DIR" --work-tree="$PROJECT_DEMO" checkout -f;

cd "$PROJECT_DEMO";
/usr/local/bin/git --git-dir="$PROJECT_DIR" submodule update --init --recursive;

注意我没有设置env变量,并且submodule命令没有设置“--work-tree”......似乎它需要在cwd中工作。

答案 1 :(得分:0)

首先,你为什么需要结账?只需在其他地方克隆它,并使用普通的非裸仓库。

但如果你真的需要这样做,你可以将文件夹重命名为.git,将bare = true更改为bare = false中的.git/config,然后执行git checkout