基本的に、ローカルのすべての変更をリモート サーバー上のバックアップ用のベア リポジトリにプッシュしてから、ベア リポジトリに変更を同じサーバー上のプロダクション (非ベア) にプッシュさせたいと考えています。今、フックを作ろうと思っています。それが問題なら、私はgitosisを使用していません。どうすればこの目標を達成できますか?
これが正しい方法かどうかはわかりませんが、基本的には、ローカルの変更をバックアップ リポジトリ (ベア) と非ベア リポジトリにプッシュしたいだけです。
基本的に、ローカルのすべての変更をリモート サーバー上のバックアップ用のベア リポジトリにプッシュしてから、ベア リポジトリに変更を同じサーバー上のプロダクション (非ベア) にプッシュさせたいと考えています。今、フックを作ろうと思っています。それが問題なら、私はgitosisを使用していません。どうすればこの目標を達成できますか?
これが正しい方法かどうかはわかりませんが、基本的には、ローカルの変更をバックアップ リポジトリ (ベア) と非ベア リポジトリにプッシュしたいだけです。
ベアでないリポジトリに正常にプッシュすることはできません。
オプション1
実際、十分に努力すれば、裸でないリポジトリをプッシュできますが、プッシュしても作業ツリーは更新されません。たとえば、プッシュ エラー メッセージには次のように表示されます。
リモートリポジトリで「receive.denyCurrentBranch」構成変数を「ignore」または「warn」に設定して、現在のブランチへのプッシュを許可できます。ただし、他の方法でプッシュしたものと一致するように作業ツリーを更新するように手配しない限り、これはお勧めできません。
裸ではないリモートの構成を変更し、受信後フックを追加して作業ツリーを更新する必要があります。そのため、より簡単な方法がある場合は、一般的には役に立ちません。
オプション 2
また、ssh (または同様のもの) を使用してベア リポジトリ以外のリモート ホストに接続し、ベア リポジトリが更新されるたびにプルを実行する、ベア リポジトリに post-receive フックを作成することもできます。これは前のオプションとよく似ていますが、ベア以外のリポジトリで構成を変更する必要はありません。
オプション 3
ポーリングは別のオプションです。https://stackoverflow.com/a/11254771/1301972と同様のことを行うことができます。ここでは、一定間隔でプルするためにベアリポジトリをポーリングしています。このオプションは git 構成やカスタム フックをまったく必要としないため、crontab にアクセスできる場合の一般的な解決策としてお勧めします。
--work-tree=<path>
これが機能するかどうかはわかりませんが、ベアリポジトリにいる間に(GIT_WORK_TREE環境変数)にチェックアウトできる場合があります。マニュアルページにはどちらの方法も見つかりませんでした。