无法在git子模块

时间:2016-03-24 09:11:18

标签: git git-submodules githooks

我们使用带有多个子模块的git模块。为了使日常使用更方便,我希望有一个post-commit钩子,它自动将子模块添加到main / super / root git repo / clone / module中的git索引,如git add mychangedsubmodulename所以准备一个提交准备好更新主要仓库中的子模块的提交引用,可能还有更多的想法。

.git文件夹位于主模块根文件夹内,并且由于使用--recursive选项克隆了主存储库,因此似乎也包含与子模块相关的内容。我的git版本是git version 2.6.4 (Apple Git-63)

我可以轻松地在主仓库中创建一个post-commit钩子,但它不会从子模块中的提交中触发,我认为这是正确和适当的,但也可能是一个可能的解决方法的线索。

我试图在question 10848191之后的不同位置定义几个提交后挂钩文件但没有任何成功。

如何实现在子模块中提交时自动修改主模块?

更新:子模块后提交钩子现在有时会工作,我设法进入主存储库并通过清理环境变量成功调用git。

# clear git environment or git would confuse main and sub repos when crossing boundary by only changing pwd
while read variable; do
    unset $variable
done < <(env | grep "^GIT_" | sed 's/=.*//g')

然而,最初的问题是如何解雇子模块钩子。这似乎只是偶尔有效。

1 个答案:

答案 0 :(得分:0)

您可以在post-commit hook中使用类似下面的内容:

git --work-tree=$PWD/.. --git-dir=$PWD/../.git branch

以上命令取自.git/modules/my-sub-module/hooks/pre-commit上的git version 2.3.2 (Apple Git-55)文件。我使用上面的命令列出主仓库的所有本地分支。

注意:不幸的是,在后提交挂钩中更改目录和运行git-commands可能不起作用,因为git依赖于某些预配置的默认设置和环境。所以我的cd path-to-main-repo-directory && git some-command里面的.git/modules/my-sub-module/hooks/pre-commit并没有帮助我。

您还可以查看manual here了解详情。