Ich möchte ein Skript haben, das alle Git-Submodule entsprechend der angegebenen Verzweigung aktualisiert. Wenn es für ein Submodul keinen solchen Zweig gibt, wird der Master verwendet.
Das habe ich jetzt:
#!/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
Beim Ausführen dieses Skripts wird jedoch der folgende Fehler ausgegeben:
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.
Ich vermute, dass git submodule foreach
eval (laut Dokumentation ) verwendet wird, was ich in diesem Zusammenhang nicht richtig verwende.
Es gibt Milliarden von Beispielen für die Verwendung dieses Befehls mit "Inline-Rückruf", aber ich konnte keinen einzigen mit dem Rückruf in Form der Funktion finden. Irgendeine Idee, wie man das löst?
git-pbranch-submodule
, kann es sich wie ein eingebauter git-Befehl verhalten:git pbranch-submodule
odergit submodule foreach git pbranch-submodule
. (Beachten Sie, dass foreach einen Shell-Befehl und keinen Git-Befehl akzeptiert.)