git を使用した Web 開発のワークフローに苦労して整理した後、最後の 1 秒でステージング サーバーを追加することになりました。私たちはローカルで開発/テストし、レポにプッシュします。他の部門の人々が何かを壊すことなく遊んだり、新しいことを試したりできるように、その間にサンドボックスが必要です。
リモート リポジトリには、マスターと開発の 2 つの長期実行ブランチ (nvie のブランチ モデルの精神による) が必要です。
1 つのリポジトリにプッシュし、develop ブランチを test.site.com docroot にチェックアウトし、準備ができたら、develop を master にマージし、master を site.com docroot にチェックアウトできるようにする必要があります。
では、サーバー上で...
git init
git add .
git commit -m "Initial commit"
git checkout -b "develop"
そして、私たちのローカルマシンでは...
git clone user@site.com:/repos/repo1.git
???
git push origin/develop (??? Updates test.site.com docroot)
サーバーに戻ってコードをライブにする
git checkout "master"
git merge develop (??? Updates site.com docroot)
git checkout -b "develop"
そして地元で
git pull
疑問符または別の提案を歓迎します。
編集: これまでのところ、いくつかの答えを試しています。その間に完全にハックなアイデアを思いついたので、共有したいと思いました:
それらすべてを支配する 1 つの post-receive フック。
ベアレポのクローンを作成し、開発を追跡します。開発をオリジン/開発にプッシュします。
受信後 - GIT_WORK_TREE を test.site.com に設定し、チェックアウト -f 開発します
コミット メッセージに「merge_master」が含まれている場合、GIT_WORK_TREE を site.com docroot に設定します。
git checkout master
git merge develop
git checkout -f master (this would be for hotfixes)
マスターを開発にマージし、ローカルでプルします
ほこりが落ち着いたら、difflog で電子メールを送信し、手を絞って、強いものを一口飲みます。
それはいくつの異なる方法で壊れる可能性がありますか?