web-dev-qa-db-ja.com

Git:リポジトリからの自動プル?

リモートリポジトリからの更新をリッスンし、何かが変更されるたびにプルするようにgitを設定する方法はありますか?ユースケースは、Gitを使用してWebアプリをデプロイすることです(デプロイされたアプリケーションのバージョン管理を取得します) 。

誰かがこれを機能させましたか? Herokuはどのようにそれを行いますか? Google-fuで関連する結果が得られません。

75
Li Haoyi

Gitには「フック」、つまり他のアクションの後に実行できるアクションがあります。あなたが探しているように見えるのは、「受信後フック」です。 github adminでは、誰かがレポジトリにプッシュするたびに(プッシュされたものに関するデータを含むペイロードで)ヒットする受信後URLを設定できます。

それが価値があることについては、自動プルは良い考えだとは思いません-何か間違ったことがあなたのブランチにプッシュされたらどうなりますか?そのようなことには、capistrano(または同等のもの)のようなツールを使用します。

41
ksol

UNIXライクでは、マシン上で(毎日または毎週など)「git pull」を呼び出すcronジョブを作成できます。 Windowsでは、タスクスケジューラまたは「AT」コマンドを使用して同じことを行うことができます。

16
SigTerm

JenkinsやBambooなどの継続的統合プログラムがあり、コミットを検出し、ビルド、テスト、パッケージ化、デプロイなどの操作をトリガーできます。彼らはあなたがやりたいことをしますが、依存関係があり、設定が難しく、最終的にはgitリポジトリに対する定期的なチェックを使用する可能性があり、これは毎分cronでgit pullを呼び出すのと同じ効果があります。

3
Pavel Niedoba

次のことを行うことで、これを実現するスクリプトを作成できます。

  1. get remote HEAD commit id
  2. iDをローカルHEADと比較します
  3. それらが異なる場合は、git pullを使用してdeployコマンドを使用します
  4. 同じ場合、合格
  5. cronジョブを記述して、スクリプトを実行します(注:重複した実行を防ぎます。)
1
bo yang

私はこの質問が少し古いことを知っていますが、Windowsログとgitを使用して、webhookとphpを使用してプロジェクトを自動プルすることができます(プロジェクトにウェブサーバーが含まれていると仮定します。ここで私の要点をご覧ください: https ://Gist.github.com/upggr/a6d92e2808e9628ebe0d01fd93569f4a

0