什么githooks被调用子模块更新?

时间:2011-05-01 07:49:59

标签: visual-studio-2010 git-submodules githooks tortoisegit

所以这就是情况。我有一个包含多个子模块的git存储库。顶级目录和所有子模块都包含Visual Studio 2010解决方案。

顶级存储库取决于子模块是最新的,每次更新时都需要重建子模块。我想要做的是,因为有任意数量的子模块,就是在git中进行某种更新后的钩子来编译刚更新的子模块。

所以我的问题是:更新子模块时会调用什么钩子(如果有的话)?似乎结账后可能是我想要的,但我不确定。

我们正在使用TortoiseGit和Git for Windows(msysgit)作为后端,如果这会产生影响。

1 个答案:

答案 0 :(得分:1)

这应该可以,回购上的 post-update hook
您需要监视.gitmodules文件是否有任何更改,以便检测该文件中的任何更改(指示父repo的另一个克隆已更改子模块并在父存储库中提交新引用)。登记/> 然后你可以:

  • 检测哪些子模块已更改
  • 决定是否要让您的子模块保持最新状态(git submodule update --recursive
  • 重新编译相关的子模块

但是假设已经修改了父repo的克隆以引用子模块的新提交。

如果您的子模块独立于任何父仓库进行更新,那么在父仓库的结账/更新时,相同的post-update挂钩(仍然在父仓库上)需要:

  • 进入每个子模块并执行提取
  • 检查fetch是否引入了任何新提交
  • 决定是否要通过从子模块中提取更改来使您的子模块保持最新状态
  • 返回父级仓库并提交,以便注册更改子模块的新SHA1
  • 重新编译需要git pull(即已更改)的文件

您可以在每个子模块上设置更新后挂钩,但是当您从父存储库添加或删除子模块时,上述方法可以更好地扩展,因为它将检测过程集中在一个位置(post-update挂钩父母回购)。