La mia intenzione è di avere uno script che aggiorni tutti i sottomoduli git in base al ramo dato. Se non esiste un ramo di questo tipo per un sottomodulo, viene utilizzato il master.
Questo è quello che ho ora:
#!/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
Ma quando si esegue questo script, viene generato l'errore:
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.
La mia ipotesi è che git submodule foreach
utilizzi eval (secondo la documentazione ), che non uso correttamente in questo contesto.
Ci sono miliardi di esempi su come usare questo comando con "callback inline" ma non sono riuscito a trovarne uno con il callback sotto forma di funzione. Qualche idea su come risolverlo?
git-pbranch-submodule
, può comportarsi come un comando git incorporato:git pbranch-submodule
ogit submodule foreach git pbranch-submodule
. (Nota che foreach accetta un comando shell e non un comando git.)