1

git を使用して Web サイトを公開しています。ワークフローは大まかに次のとおりです。

$ git add my_file
$ git commit -m comment my_file
$ git push # Just house-keeping, goes to my master repo
$ git push ssh://user@webserver//var/www/repo.git

Web サーバーの post-receive フックは次のようになります。

#!/bin/bash

working=$(pwd)
working=${working##*/}
working=../${working%.*}
while read oldrev newrev ref ; do
    branch=$(echo ${ref} | cut -d/ -f3)
    GIT_WORK_TREE=${working} git checkout -f ${branch}
done

ほとんどの場合、これで問題なく動作します。つまり、1 つのファイルを追加すると、チェックアウトによってその 1 つのファイルが変更されます。

1 日待ってから別のコミットとプッシュを行った場合にのみ、受信後フックの git チェックアウトが作業コピー内のすべてのファイルを再フェッチします。時間がかかるだけでなく、後で実行するrsyncを台無しにします。

明日行われるチェックアウトが、今日何度も繰り返すことができるチェックアウトとは大きく異なるように、一晩で何が起こる可能性がありますか?

4

1 に答える 1

0

ブランチをまったく使用していますか?post-receive フックから、サイトのコードをホストするために使用する参照をフィルタリングしていないようです。代わりに、変更されたすべての参照に対してチェックアウトを行います。コードを別のブランチにプッシュすると、それを反映してサイトが更新されます。おそらく、重要な ref (おそらくrefs/heads/master) のチェックアウトのみを実行したいと思います。それだけです。

変わってるかも

while read oldrev newrev ref ; do
    branch=$(echo ${ref} | cut -d/ -f3)
    GIT_WORK_TREE=${working} git checkout -f ${branch}
done

while read oldrev newrev ref ; do
    if [ "$ref" == "refs/heads/master" ]; then
        branch=$(echo ${ref} | cut -d/ -f3)
        GIT_WORK_TREE=${working} git checkout -f ${branch}
    fi
done
于 2013-10-29T10:52:00.277 に答える