Moje wcięcie polega na tym, aby mieć skrypt aktualizujący wszystkie podmoduły git zgodnie z gałęzią. Jeśli nie ma takiej gałęzi dla submodułu, używany jest master.
Oto co mam teraz:
#!/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
Ale podczas uruchamiania tego skryptu pojawia się błąd:
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.
Domyślam się, że git submodule foreach
wykorzystuje eval (zgodnie z dokumentacją ), którego nie używam poprawnie w tym kontekście.
Istnieją miliardy przykładów użycia tego polecenia z „wbudowanym wywołaniem zwrotnym”, ale nie udało mi się znaleźć ani jednego z wywołaniem zwrotnym w postaci funkcji. Masz pomysł, jak to rozwiązać?
git-pbranch-submodule
, może zachowywać się jak wbudowane polecenie git:git pbranch-submodule
lubgit submodule foreach git pbranch-submodule
. (Zauważ, że foreach akceptuje polecenie powłoki, a nie polecenie git).