Git:自动提交具有相同消息的子模块

Bojian Zheng

我的工作项目如下:

project/
  .git/
  .gitmodules
  submodule/  # submodule is a git submodule

我希望每当我在子模块中进行提交时。父模块projectsubmodule使用相同的提交消息进行提交。我试图使用commit-msg钩子来实现这一点

#!/bin/bash
# project/.git/modules/submodule/hooks/commit-msg
cd $(dirname ${BASH_SOURCE[0]})/../../../..
git commit submodule -m "$(cat $1)"

但这不起作用,因为我收到错误消息“错误:pathspec'子模块'与git已知的任何文件都不匹配”。原因似乎是因为该git commit命令还将调用该commit-msg钩子,从而导致递归调用。

我可以知道如何正确执行此操作吗?

jingx

commit-msg 可能不是执行此操作的最佳位置,因为它用于处理提交消息,并且在调用子模块时尚未进行提交。

这个post-commit挂钩对我有用:

COMMIT_MSG=$(git log -1 --pretty='format:%B' HEAD)
# I use zsh so $0 works for me. In bash BASH_SOURCE is correct
TOP=$(realpath $(dirname $0)/../../../..)

GIT_INDEX_FILE_SAV=$GIT_INDEX_FILE
unset GIT_INDEX_FILE
git --git-dir .git --work-tree . -C ${TOP} commit sub -m "${COMMIT_MSG}"
GIT_INDEX_FILE=$GIT_INDEX_FILE_SAV

调用该钩子时,我们位于git commit子模块的中间,因此GIT*根据子模块存储库设置了各种环境变量。我们需要重置它们,并让git使用父仓库中的值。

[编辑]更好的填充方法$TOP

TOP=$(git rev-parse --show-superproject-working-tree)

感谢@phd提出建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

git子模块签出相同的提交

在git中具有子模块的浅表克隆,如何使用指向提交而不是最新提交?

当我结帐母版时,git子模块具有“新提交”

Git子模块代码提交

git子模块添加错误:没有签出提交

是否有任何自动方法来更新父git repo以指向其子模块的最新提交?

忽略git子模块的新提交

Git子模块和孤立的提交

如何自动从Heroku上的git子模块中提取最新提交?

使用子模块时,模块可以与包本身具有相同的名称吗?

如何对git子模块使用相同的协议?

如何自动拉git子模块?

如果子模块可能具有公共父目录,如何从子模块中删除.git文件?

使用带有grunt-git和grunt-githooks的子模块的后提交钩子来提交Git“ Supermodule”

Git子模块显示新的提交,子模块状态表明什么都没提交

有没有办法让git pull自动更新子模块?

有没有一种方法可以自动更新git子模块?

如何重新设置git子模块,以保留对包含子模块的git存储库中对子模块提交的引用?

如何自动将所有符号链接转换为repo中的git子模块

如何git标记所有子模块?

克隆所有子模块的git repo

没有 .gitmodules 文件的 git 子模块?

为 git 历史记录中的所有提交更改 git 子模块的远程存储库

Git子模块的提交与主仓库中的标签匹配

如何git checkout commit并使子模块更新到该提交?

git如何知道在哪个提交中检出子模块?

如何在git子模块中“提交”更改?

将Git子模块更新为最新的原始提交

`git submodule update` 不会检出子模块中的提交