我正在使用一些带有一些子模块的git存储库,这些子模块在不同的分支上有不同的修订版本。当我切换分支时,我得到一个:
M path/to/subrepo
Switched to branch 'another-branch'
信息。然后我手动做:
git submodule update --recursive
那就消失了。
我尝试在.git / hooks / post-checkout中编写一个git hook:
#!/bin/bash
exec git submodules update --recursive
但这似乎没有做任何事情。我试图从post-hook行添加一个exec echo hello - 似乎也没有用。
我的问题:我可以配置git,以便分支机构签出本身也会更新子模块,默认情况下?
我尝试在.git / hooks / post-checkout中编写一个git hook:
检查你是否正确拼写了钩子的名称,并且钩子有可执行标志(如果没有,git
会给你一个警告)。
你发布的剧本中有一个拼写错误:s
结尾应该没有submodule
。也许这只是你发布的内容中的一个错误,但是如果它在你的实际钩子中,你应该在钩子运行时看到一条错误信息,而你不这样做的事实(以及你的echo
不起作用)表明钩子根本没有运行。
如果您没有上面提到的拼写错误,并且钩子中的echo
语句确实有效,那么您没有看到您的git submodule update
行做任何事情就不足为奇了 - 如果项目中的子模块,该命令不会给出任何输出已匹配分支中指定的提交。您将看到输出的唯一时间是是否存在实际需要更新的子模块。还记得git submodule update
doesn't get the latest versions of the submodules,它获得了你在项目中提交的那些。
一般来说,你有正确的想法:你绝对可以添加一个名为post-checkout
的钩子到.git/hooks/
,它应该在你成功git checkout
一些分支时运行。
如果您的git版本是2.13或更高版本,请尝试选项--recurse-submodules:
git checkout another-branch --recurse-submodules
在某些情况下,您可能还需要添加-f
。