所以我有一个带有子模块的项目,该子模块每隔一段时间就会更新一次。我尝试遵循一些提交规则,其中之一是在提交中包含分支名称。我使用 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/