我正在同时包含一个子模块和一个子模块的项目中工作。 由于它们不断在本地构建,因此我至少需要在子模块内部进行的每次提交时都更新子模块。
这是一个受this post on hooks和this post on submodules以及this for cleaning the env和for the debugging启发的post-commit
钩子
这已经是一个可行的解决方案,但是如果有更好的方法,我将接受答案。
#!/bin/sh
### functions
exec_push()
{
ping -c 1 heise.de 2>&1 >> /dev/null # check connectivity
PING_RESULT=$?
if [ $PING_RESULT -eq "0" ]
then
git push --recurse-submodules=on-demand --quiet
else
echo "sorry no internet connectivity"
exit 1
fi
}
### end functions
echo "post-commit started"
branch="$(git rev-parse --abbrev-ref HEAD)"
echo "running on branch $branch"
superproject="$(git rev-parse --show-superproject-working-tree)"
echo "running for superproject $superproject"
current_submodule="$(pwd)"
echo "adding submodule $current_submodule"
if [ "$branch" = "master" ]
then
exec_push
env -i git -C "$superproject" add .
fi
echo "post-commit finished"
而不是提交更改,它只会暂存它们,因此会在下一次完全提交时提交它们。
答案 0 :(得分:0)
基本的post-commit
钩子:
#!/bin/sh
echo "post-commit started"
branch="$(git rev-parse --abbrev-ref HEAD)"
echo "running on branch $branch"
superproject="$(git rev-parse --show-superproject-working-tree)"
echo "running for superproject $superproject"
current_submodule="$(pwd)"
echo "adding submodule $current_submodule"
if [ "$branch" = "master" ]
then
env -i git -C "$superproject" add .
fi
echo "post-commit finished"