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を台無しにします。
明日行われるチェックアウトが、今日何度も繰り返すことができるチェックアウトとは大きく異なるように、一晩で何が起こる可能性がありますか?