Minha intenção é ter um script que atualize todos os sub-módulos git de acordo com o ramo. Se não houver tal ramificação para um submódulo, o mestre será usado.
Isto é o que eu tenho agora:
#!/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
Mas ao executar esse script, o erro é gerado:
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.
Meu palpite é que git submodule foreach
utiliza eval (de acordo com a documentação ), que não uso corretamente neste contexto.
Existem bilhões de exemplos de como usar este comando com "retorno de chamada em linha", mas não consegui encontrar um único com o retorno de chamada na forma da função. Alguma idéia de como resolver isso?
git-pbranch-submodule
, ele pode se comportar como um comando git embutido:git pbranch-submodule
ougit submodule foreach git pbranch-submodule
. (Note-se que foreach aceita um comando da shell e não um comando git.)