【发布时间】:2021-12-07 14:41:23
【问题描述】:
所以我有一个带有子模块的项目,它每隔一段时间就会更新一次。我有一些我尝试遵循的提交规则,其中之一是在提交中包含分支名称。我使用 githooks 完成此操作,如下所示:
从顶级目录
.git/hooks/prepare-commit-msg
#!/bin/sh
BRANCH=`git branch | grep '^\*' | cut -b3-`
FILE=`cat "$1"`
echo "$BRANCH $FILE" > "$1"
.git/hooks/pre-commit
#!/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
然后我只是设置权限 sudo chmod 755 .git/hooks/prepare-commit-msg sudo chmod 755 .git/hooks/pre-commit
但是,这不适用于子模块,因为它没有 .git 目录。有没有办法强制子模块使用父目录中的钩子?如果我独立打开子模块,我可以让它工作,但是将它放在父模块下会更实用,因为它可以让东西井井有条。
【问题讨论】:
-
1. stackoverflow.com/a/67848922/7976758 2. 子模块有
.git目录;但是您必须了解子模块是独立的存储库并具有独立的挂钩。 -
不适用于我所在的仓库:来自partent repo cd submodule ls -lah .rw-r--r-- 28 uname 7 Oct DATE .git 如果我单独克隆子模块,我可以编辑它(正如我在问题中提到的)
-
我完全愿意将钩子添加到子模块,但是当它附加到父模块并由 git submodule update --init 创建时我不能这样做,因为子模块没有有一个 .git 目录,只是一个文件。当 submod 独立时:
drwxrwxr-x - user 20 Oct DATE .git当 submod 附加到 parent 并由 git submodule update 创建时:.rw-r--r-- 28 uname 7 Oct DATE .git -
读取
.git文件:它包含子模块存储库的路径。看那里:它是一个存储库,有一个hooks目录。你可以把 Git 钩子放在这里。不过这一切都很痛苦。如果您想走这条路,使用git rev-parse --git-directory将帮助您自动执行此操作。
标签: git git-submodules githooks