私のインデントは、与えられたブランチに従ってすべてのgitサブモジュールを更新するスクリプトを作成することです。サブモジュールにそのようなブランチがない場合は、マスターが使用されます。
これは私が今持っているものです:
#!/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コマンドではなく、シェルコマンドを受け入れることに注意してください。)