git - 从父模块的 .git 将预提交 Hook 添加到子模块

标签 git git-submodules githooks

所以我有一个带有子模块的项目,该子模块每隔一段时间就会更新一次。我尝试遵循一些提交规则,其中之一是在提交中包含分支名称。我使用 githooks 完成此操作,如下所示:

来自顶级目录

.git/hooks/prepare-commit-msg

#!/bin/sh

BRANCH=`git branch | grep '^\*' | cut -b3-`
FILE=`cat "$1"`
echo "$BRANCH $FILE" > "$1"

.git/hooks/预提交

#!/bin/bash

find vendor -name ".git*" -type d | while read i
do
        if [ -d "$i" ]; then
                DIR=`dirname $i`
                rm -fR $i
                git rm -r --cached $DIR > /dev/null 2>&1
                git add $DIR > /dev/null 2>&1
        fi
done

然后我只是设置权限 须藤 chmod 755 .git/hooks/prepare-commit-msg sudo chmod 755 .git/hooks/预提交

但是,这对于子模块不起作用,因为它没有 .git 目录。有没有办法强制子模块使用父目录中的钩子(Hook)?如果我独立打开子模块,我可以使其工作,但是,将其保留在父模块下更实用,因为它可以使内容井井有条。

最佳答案

对于子模块,您可以拥有单独的 Git 目录,也可以拥有吸收的子模块。如今,Git 代码更喜欢后者,当使用它时,子模块中的 .git 是一个名为 gitlink 的特殊文件,它指向一个目录在主存储库的 .git 目录中。

如果您想查找任何 Git 存储库的 hooks 目录,无论是否是子模块,您可以运行以下命令:

$ git rev-parse --git-path hooks

这将打印 hooks 目录。如果您想在子模块中使用与父模块相同的钩子(Hook),可以将子模块的钩子(Hook)目录设置为父模块的符号链接(symbolic link)。

关于git - 从父模块的 .git 将预提交 Hook 添加到子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69651701/

相关文章:

github api 不返回我的 post-receive web hook

linux - GIT 提交后,我做了 GIT 推送,但消息说一切都是最新的

在 git 子目录中执行 git init

angular - 忽略 .gitignore 中名为 npm-debug.log.XXXXXX 的文件

git - 在 git checkout-index 中也包括子模块

Git 子模块警告 'multiple configurations found'

Git Hook 静默失败

git - 跨平台 git 钩子(Hook)

Git LFS 给 x509 : certificate signed by unknown authority

git - 是否有可能仅在下一次提交时为 'git pull'?