更新後のフックは、更新されたすべての参照の名前を取得します。これらは位置パラメータ(、、$1
など$2
)になります。あなたはそれぞれをどうするかを決める必要があります。
たとえば、このややばかげた更新後のスクリプト:
#! /bin/sh
for ref do
case $ref in
refs/heads/*) echo "a branch ($ref) was updated";;
refs/tags/*) echo "a tag ($ref) was updated";;
*) echo "something I don't understand ($ref) was updated";;
esac
done
更新されたすべてのフルネームを出力するだけです。
馬鹿げたことを少なくするために、ブランチの更新をキャッチして、それらを使って何か便利なことをしたいとしましょう。最初のエコーをより複雑なものに置き換えます。
refs/heads/*) branch_update $ref;;
もちろん、branch_update関数を定義する必要があります。これが新しいスクリプトです(まだ何もしませんが、何かをするための明白な場所があります):
#! /bin/sh
branch_update() {
local shortname=${1#refs/heads/}
echo "branch $shortname is being updated"
case $shortname in
master) echo "master is updated, do something";;
work) echo "work branch is updated, do something else";;
*) echo "it's not a magic branch, do nothing";;
esac
}
for ref do
case $ref in
refs/heads/*) branch_update $ref;;
refs/tags/*) echo "a tag ($ref) was updated";;
*) echo "something I don't understand ($ref) was updated";;
esac
done
余談ですが、質問の言い回しは、あなたが「gitで考えている」とは言えないことを示唆しています。:-)プッシュ(あるレポジトリの自分のコピーからあるレポジトリの裸かどうかに関係なく、他のコピーへ)を行うとき、視点を変えると結果がより理解しやすくなるかもしれません。「私はプッシュしている」と考えることから始めることができますが、リモートリポジトリを他のアクターとして想像し、彼に名前を付けて「ボブ」と呼び、ボブが何を見ているかを考えてみましょう。ボブの観点から、「Yekverは何かをプッシュしている」のではなく、Bobは次のように考えています。 1、そして私はいくつかのコミットを取り、それらを私のrefs / heads / masterに入れています、そして私は '
ここでの重要な概念は、gitが行うことに関して、すべてがローカルであるということです。ボブの観点からは、ボブのレポはローカルです。Yekverという名前の人は、それに基づいたレポを持っているかもしれませんが、BobのコピーはBobのものです。ボブはボブのローカルリポジトリを使用してローカルなことを行います。これらのフックスクリプト内で作業しているときは、「ボブである」ことになります。