Я хочу иметь скрипт, который обновляет все подмодули git, в соответствии с тем, какая ветка дана. Если для подмодуля нет такой ветки, используется master.
Вот что у меня сейчас:
#!/bin/bash -x
if [ -z $1 ]; then
echo "Branch name required."
exit
fi
function pbranch {
exists=`git show-ref refs/heads/$branch`
if [ -z $exists ]; then
branch="master"
fi
git co $branch
git pull origin $branch
}
branch=$1
git submodule foreach pbranch
Но при запуске этого скрипта выдается ошибка:
oleq@pc ~/project> git-fetchmodules major
+ '[' -z major ']'
+ branch=major
+ git submodule foreach pbranch
Entering 'submodule'
/usr/lib/git-core/git-submodule: 1: eval: pbranch: not found
Stopping at 'submodule'; script returned non-zero status.
Я предполагаю, что git submodule foreach
использует eval (согласно документации ), который я не правильно использую в этом контексте.
Есть миллиарды примеров использования этой команды с «встроенным обратным вызовом», но я не смог найти ни одного с обратным вызовом в форме функции. Есть идеи, как это решить?
git-pbranch-submodule
, он может вести себя как встроенная команда git:git pbranch-submodule
илиgit submodule foreach git pbranch-submodule
. (Обратите внимание, что foreach принимает команду оболочки, а не команду git.)