0

サーバー側で行われた変更 (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 フックです。

4

1 に答える 1

0

ローカルにないコミットがある場合、リモートブランチにプッシュできないため、競合するかどうかにかかわらず、あなたがやろうとしていることはちょっと難しいです。あなたがそれで大丈夫なら、あなたはかなり正しい軌道に乗っています. 上記のスクリプトを受信後のフックとして設定していると思いますか? 事前受信フックとして設定し、変更がある場合はゼロ以外を返すだけです。また、エラー メッセージをユーザーにエコーして、何が起こっているかを伝えたい場合もあります。

その場合、プッシュは失敗し、ユーザーはプッシュする前にプルする必要があります (プッシュは早送りではないため)。

しかし、なぜ変更を確認するにチェックアウトを行うのでしょうか?

于 2012-12-19T22:34:45.480 に答える