我们使用带有多个子模块的 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)
.
我可以轻松地在主存储库中创建一个提交后挂钩,但它不会从子模块内的提交中触发,到目前为止我认为这是正确且适当的,但也可能是可能的解决方法的线索。
我尝试在不同位置定义几个提交后挂钩文件,也遵循问题 10848191没有任何成功。
如何实现在子模块提交时自动修改主模块?
Update:在子模块提交后挂钩有时可以工作之后,我设法 cd 进入主存储库并通过清理环境变量成功调用 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')
然而,最初的问题是如何触发子模块挂钩。这似乎只是有时有效。
您可以在提交后挂钩中使用如下所示的内容:
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 命令可能不起作用,因为 git 依赖于一些预配置的默认设置和环境变量。所以就我而言cd path-to-main-repo-directory && git some-command
在我里面.git/modules/my-sub-module/hooks/pre-commit
没有帮助我。
您还可以检查手册在这里更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)