1

私は/var/www/website(非ベア)リポジトリとしてセットアップし、ベアリポジトリの更新後のフックを持っています:

#!/bin/sh

echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo

cd /var/www/website || exit
unset GIT_DIR
git pull hub master

exec git-update-server-info

プッシュした直後にウェブサイトで変更を確認したいからです。

しかし、ローカルリポジトリでそれと連携するリモートブランチを作成し、コミットして変更をプッシュすると、Webサイトでそれらを表示できません(常にマスターが表示されます)。

リモート(ベアではない)リポジトリでチェックアウトを行う方法はありますか?

4

1 に答える 1

1

更新後のフックは、更新されたすべての参照の名前を取得します。これらは位置パラメータ(、、$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のものです。ボブはボブのローカルリポジトリを使用してローカルなことを行います。これらのフックスクリプト内で作業しているときは、「ボブである」ことになります。

于 2012-10-07T23:38:19.663 に答える