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


90

リモートリポジトリからの更新をリッスンし、何かが変更されるたびにプルするようにgitを設定する方法はありますか?使用例は、gitを使用してWebアプリをデプロイしたい(デプロイされたアプリケーションのバージョン管理を取得したい)が、「中央」のgitリポジトリをWebサーバーではなくGithubに配置したい場合です(Githubのインターフェイスはとても素敵です) 。

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

回答:


48

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

価値があるので、自動プルは良い考えではないと思います-何か問題がブランチにプッシュされた場合はどうなりますか?私はそのようなことのためにcapistrano(または同等の)のようなツールを使うでしょう。


10
私の計画したユースケースは、開発者の「テストと混乱」段階用に個別のリポジトリ/ブランチを用意し、すべてが機能することを確認したときにのみプッシュする特別な「本番環境へのプッシュ」リポジトリを用意することでした。私は基本的にGitを使用してrsyncで実行できますが、デプロイされたすべてのバージョンのログを保持し、以前のバージョンに簡単にロールバックできます。capistranoのようなもっとハードコアなものに対する利点は、(今のところ)本当に小さなプロジェクトのためにまったく新しいツールを学ぶ必要がないことです。
Li Haoyi 2012

Webhook認証は、安全性の問題と複雑さを増すため、プルベースのソリューションには依然として利点があります。リリースバージョン管理は、偶発的な展開を回避するためにタグを使用して実行できます。
lz96

21

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


3
Gitの適切な使用方法ではありません。
2015年

26
@deepdiveどうして?家に小さなRasperryPiがあり、静的IPが利用できないと想像してください。cronまたはrunwhenジョブを実行する場合、他にどのようなオプションがありますか?
カイザー2016年

2
それは良い考えではありません。彼は、プッシュした直後に変更を適用することを望んでいます。
boi_echos 2016

10
OPは特に、リモートリポジトリからの更新リッスンし何かが変更されるたびにプルするメソッドを求めています。このソリューションはリポジトリから頻繁にプルするだけなので、効果的にするには、間隔を非常に短くする必要があり、冗長なプル要求が非常に多く発生します。
ボアズ2016年

3
cronタブを変更せずにこれを行う簡単な方法:while true; do git pull; sleep 10; done。これが行いますgit pull... 10秒ごとに
JakeD

3

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


0

この質問は少し古いと思いますが、WindowsログとGitを使用して、WebhookとPHPを使用してプロジェクトを自動プルできます(プロジェクトにWebサーバーが含まれていると仮定します。ここで私の要点を参照してください:https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.