在签出分支时,我可以让git自动更新子模块吗?

问题描述 投票:3回答:2

我正在使用一些带有一些子模块的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 git-submodules git-checkout
2个回答
1
投票

我尝试在.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一些分支时运行。


1
投票

如果您的git版本是2.13或更高版本,请尝试选项--recurse-submodules

git checkout another-branch --recurse-submodules

在某些情况下,您可能还需要添加-f

© www.soinside.com 2019 - 2024. All rights reserved.