1

私のシステムには、いくつかの C++ コードを含む git リポジトリがほとんどありません。私のシステムにリクエストを送信するユーザーは、すべての git リポジトリからまとめてコンパイルされたバイナリ実行可能ファイルを取得しています。このシステムの基本的な機能は、ソースの最新バージョンからビルドされたバイナリを送信することです。そうするために、システムが実行する要求を受け取るたびにgit pull --all、このコマンドには多くの時間がかかります。リクエストが届いたときにプル コマンドを実行するのを避け、代わりに、新しいバージョンがコミットされたときにシステムがプル コマンドを自動的に実行するようにしたいと考えています。自動的に行う方法は?

私が考えることができる唯一の方法は、gitサーバーに1秒ごとに定期的にクエリを実行し、リモートリポジトリに新しいコミットがあるたびにpullコマンドを実行することですが、ポーリングは私が探している最後の解決策だと思います. それでも、この素朴なポーリング方式を実装する方法と、どのような代替手段がありますか?

4

1 に答える 1

2

git サーバーのベア リポジトリにpost-receive フックを配置して、そのフックが非ベア リポジトリに移動し、プルできるようにすることができます。
作業ツリーを常に最新の状態に保ち、コミット後にコミットします。

この質問で例を見ることができます。

#!/bin/sh

unset $(git rev-parse --local-env-vars)
cd /path/to/non-bare.repo
git pull

フォローアップの質問「Can I issue git rev-parse on remote repository without a local copy?」に示されているように、torekは次のように述べています。

を使用git ls-remoteして、リモート (を含む) からヘッド SHA-1 を取得できますrefs/heads/master
ヘッド SHA-1 がローカルにあると仮定すると、「同じ」か「異なる」かがわかります。
それらが異なる場合、その理由を正確に伝えることはできません (ただし、地元の回転数を歩いていれば、おそらく十分に得ることができます)。

git ls-remoteと の出力を比較するとgit rev-parse master、ローカル リポジトリが更新されているかどうかがわかります。

これは、いつトリガーするかを知る方法git pullです。

于 2013-10-15T10:20:43.000 に答える