サーバーに裸の git リポジトリを作成し、このブログから次の post-receive フックを設定しました。
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/path/to/my/project/live/ checkout -f $branch
echo 'Changes pushed live.'
fi
if [ "develop" == "$branch" ]; then
git --work-tree=/path/to/my/project/dev/ checkout -f $branch
echo 'Changes pushed to dev.'
fi
done
サーバーにローカルにプッシュするたびに、手動でプルする必要なく、変更が各ブランチのフォルダーに自動的に公開されるようにします。
私は適切なアクセス許可を両方とも dev フォルダーに設定しました。
drwxrwsr-x 2 git git 4096 Sep 29 12:10 live/
drwxrwsr-x 2 git git 4096 Sep 29 12:09 dev/
そして、開発ブランチからのプッシュは期待どおりに機能します。master ブランチをチェックアウトしてマージすると、問題が発生します。マスターをプッシュすると、新しいファイルがサーバーのライブ フォルダーにコピーされますが、ローカルで削除したファイルは削除されません。
受信後、ライブ フォルダを適切に更新するにはどうすればよいですか? ありがとう!