サーバー側で行われた変更 (WordPress が新しいプラグインの更新をインストールするときや、誰かが何かをアップロードするときなど) をサイトの展開に使用する Git リポジトリにコミットする方法を一日中探していました。これは私が得た最も近いものです:
#!/bin/sh
git --git-dir=/home/cameronm/git/cameronmalek.git --work-tree=/home/cameronm/public_html/ checkout -f master
git --work-tree=/home/cameronm/public_html/ diff --exit-code &>-
if [ "$?" -ne 0 ]; then
git --work-tree="/home/cameronm/public_html/" add .;
git --work-tree="/home/cameronm/public_html/" commit -m "automated server-side update";
fi
このソリューションの問題、およびこの投稿の理由は、すべてが間違った順序で発生することです。更新がプッシュされる前に、Git 以外の関係者が行ったすべての変更をライブ Web サイト ディレクトリにコミットする方法を探しています。これの理由は、プッシュしようとしている更新が最近サーバーに追加されたものを上書きする場合、潜在的にマージの競合を確認できるようにしたいからです。
私はこれを理解しようとして一晩中起きていました。これは説明するのが (そして Google も) 難しい問題です。
助けてくれてありがとう!
アップデート!
Gists ページで、私の実用的なソリューション (個別の pre-receive フックと post-receive フック) を確認できます。これがpre-receive フックとpost-receive フックです。