1

基本的に、ローカルのすべての変更をリモート サーバー上のバックアップ用のベア リポジトリにプッシュしてから、ベア リポジトリに変更を同じサーバー上のプロダクション (非ベア) にプッシュさせたいと考えています。今、フックを作ろうと思っています。それが問題なら、私はgitosisを使用していません。どうすればこの目標を達成できますか?

これが正しい方法かどうかはわかりませんが、基本的には、ローカルの変更をバックアップ リポジトリ (ベア) と非ベア リポジトリにプッシュしたいだけです。

4

2 に答える 2

1

TL;DR

ベアでないリポジトリに正常にプッシュすることはできません。

3 つの実用的なオプション

オプション1

実際、十分に努力すれば、裸でないリポジトリをプッシュできますが、プッシュしても作業ツリーは更新されません。たとえば、プッシュ エラー メッセージには次のように表示されます。

リモートリポジトリで「receive.denyCurrentBranch」構成変数を「ignore」または「warn」に設定して、現在のブランチへのプッシュを許可できます。ただし、他の方法でプッシュしたものと一致するように作業ツリーを更新するように手配しない限り、これはお勧めできません。

裸ではないリモートの構成を変更し、受信後フックを追加して作業ツリーを更新する必要があります。そのため、より簡単な方法がある場合は、一般的には役に立ちません。

オプション 2

また、ssh (または同様のもの) を使用してベア リポジトリ以外のリモート ホストに接続し、ベア リポジトリが更新されるたびにプルを実行する、ベア リポジトリに post-receive フックを作成することもできます。これは前のオプションとよく似ていますが、ベア以外のリポジトリで構成を変更する必要はありません。

オプション 3

ポーリングは別のオプションです。https://stackoverflow.com/a/11254771/1301972と同様のことを行うことができます。ここでは、一定間隔でプルするためにベアリポジトリをポーリングしています。このオプションは git 構成やカスタム フックをまったく必要としないため、crontab にアクセスできる場合の一般的な解決策としてお勧めします。

于 2012-07-07T09:46:59.020 に答える
0

--work-tree=<path>これが機能するかどうかはわかりませんが、ベアリポジトリにいる間に(GIT_WORK_TREE環境変数)にチェックアウトできる場合があります。マニュアルページにはどちらの方法も見つかりませんでした。

于 2012-07-07T21:22:05.507 に答える