我正在使用带有一些子模块的git存储库,这些子模块在不同的分支上具有不同的修订版。当我切换分支时,我得到一个:
M path/to/subrepo
Switched to branch 'another-branch'
消息。然后,我手动执行以下操作:
git submodule update --recursive
然后消失了。
我尝试在.git / hooks / post-checkout中编写一个git钩子:
#!/bin/bash
exec git submodules update --recursive
但是这似乎没有任何作用。我试图从挂机后行添加exec echo hello-似乎也不起作用。
我的问题:默认情况下,我可以配置git以便分支检出本身也更新子模块吗?
答案 0 :(得分:1)
如果您的git版本是2.13或更高版本,请尝试选项--recurse-submodules:
user-agents
在某些情况下,您可能还需要添加git checkout another-branch --recurse-submodules
。
答案 1 :(得分:1)
我尝试在.git / hooks / post-checkout中编写一个git钩子:
检查您是否正确拼写了该挂钩的名称,并且该挂钩具有可执行标志(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
某个分支,它就应该运行。