我们使用带有多个子模块的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')
然而,最初的问题是如何解雇子模块钩子。这似乎只是偶尔有效。
答案 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了解详情。