Как автоматически ставить коммиты из подмодуля

Я работаю над проектом, содержащим подмодуль и подмодуль одновременно. Поскольку они постоянно создаются локально, мне нужно обновлять подмодуль по крайней мере при каждой фиксации, которую я делаю внутри него.

Вот хук 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"

вместо того, чтобы фиксировать изменение, он только этапирует их, поэтому они фиксируются при следующей полной фиксации.


person 927589452    schedule 09.09.2019    source источник


Ответы (1)


Базовый 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"
person 927589452    schedule 09.09.2019
comment
Я жалуюсь на код: env -i очищает слишком много, он может, например, очистить $PATH, если мой git находится на нестандартном пути; используйте unset $(git rev-parse --local-env-vars). git add . добавляет слишком много; команда могла добавлять изменения в суперпроект, не относящиеся к подмодулю; должен быть способ назвать подмодуль в git add <submodule>. - person phd; 09.09.2019
comment
Я добавлю unset rev-parse напрямую, и я посмотрю на добавление, но поскольку cwd не изменяется, он должен добавить подмодуль - person 927589452; 10.09.2019