2

hooks/post-receive次のスクリプトをフックとしてベア git リポジトリに追加すると、次のようになりますfoo.git

#!/bin/sh
GIT_WORK_TREE=/bar git checkout -f

その後、誰かがリポジトリにプッシュするたびに、現在の状態が directory で更新されbarます。

これにはbar、 とfoo.gitが同じマシン上にあることが必要です。

チェックアウトがリモートマシンで行われるように変更する最も簡単な方法は何baz:/barですか?

1つの方法は次のとおりです。

#!/bin/sh
GIT_WORK_TREE=/tmp/bar git checkout -f
rsync ... /tmp/bar baz:/bar

より良い方法はありますか?おそらく、中間一時ディレクトリは必要ありませんか? (そうでない場合、結果のディレクトリが直接チェックアウトされるのと同一になるように rsync に渡す正しいオプションは何ですか?)

4

1 に答える 1

1

GIT_WORK_TREE=/barbargit リポジトリであることを意味します。

barがリモート側の git リポジトリである場合、プッシュbare_bar.git先のベア リポジトリ (リモート側も) からプルできます。

言い換えれば、あなたのpost-receiveフックは ssh を介してベア リポジトリにプッシュし、そのベア リポジトリのフックは実際のリポジトリpost-receiveからのプルをトリガーしbarます。


リモートサーバーに.gitディレクトリがないようにするソリューションを好むでしょう(理想的にはgitパッケージ自体も)

その場合、現在の post-receive フックとそのコマンドが、新しいデータをリモート作業ツリーに段階的にコピー rsyncする唯一の方法のようです。

  • git archive毎回すべてをアーカイブします。
  • git bundle反対側でgitが必要になります。
于 2013-01-23T06:48:22.727 に答える