2017-10-12 8 views
10

バックグラウンドで何かを実行したいのですが、私のリモートブランチで何らかの変更が起きると、基本的にgit pull --rebaseが実行されます。ほとんどの場合、競合がなければバックグラウンドで静かに動作します。紛争が起きると、私はrebase-resolve-conflictの段階に陥り、待っているすべてのものを解決します。これはどうすればいいですか?すでにこれを行っている既存のソフトウェアはありますか?Git:リモートトラッキングブランチで変更が発生した場合、ローカルブランチを自動更新する方法はありますか?

+2

あなたは、リモートリポジトリにフックを追加したり、X分ごとにローカルでジョブを実行する必要が役立つかもしれません。 –

+0

あなたのリポジトリはgit serverでホストされていますか? Github、Gitlab、Bitbucket、..? –

+0

@OrtomalaLokni:なぜそれは重要ですか?私は、遠隔地のGitサーバーについて一般的に質問しています... – pathikrit

答えて

5

リモートリポジトリを制御できない場合、1つの解決策として、git fetch、またはgit pull --rebaseを定期的に実行することが考えられます(crontab)。選択する正確なコマンドはワークフローによって異なりますが、個人的にはgit fetchを使用することを好みます。これは、マージまたはリベースするタイミングと方法を決定できるからです。これはgitのコマンドをあなたの持つすべての分を実行します

* * * * * git -C PATH_TO_LOCAL_REPO fetch 

または

* * * * * git -C PATH_TO_LOCAL_REPO pull --rebase 

crontab -e 

、そのように行を追加します。定期的に実行コマンドを実行するには

ユーザーのアクセス許可。

リポジトリのリストにはgitコマンドを適用したい場合は、行を追加することができますすることができます

* * * * * /home/myself/scripts/git-refresh.sh 

のgit-リフレッシュは、すべてのリポジトリに適用するスクリプトです。

-Cオプションを使用すると、ディレクトリを変更せずにgitコマンドを実行できます。 man pageから:

-C <path>

実行gitのではなく、現在の作業ディレクトリの中で開始されたかのように。

+0

しかし私はデスクトップ上にあるすべてのリポジトリにこれを手動で追加する必要があります!私はおそらく私のマシンに何百ものレポを持っています。たとえば、以下のように手動で行うことはできません。私はgitプロジェクトのルートにある端末で 'git-keep-fresh.sh&'のようなスクリプトを実行します。次に、これは対立に関する私の質問の2番目の部分をどのように処理しますか? – pathikrit

+0

私は自分の答えを更新しましたマルチリポジトリの側面を考慮に入れてください。紛争解決のためには、すべての場合において、手動化する必要がある場合があります。自動化できない場合があります。 –

+0

@pathikrit:最初の質問は、1つのリポジトリの解決策を見つけることを暗示していたことに注意してください。 cronjobを使用すると、任意のスクリプトを実行できます。 gitリポジトリのディレクトリをスキャンして(開始点は '$ HOME -name .git')、リポジトリの明示的なリストを渡すことができます(' cat $ HOME/.repositories') 。 – LeGEC

0

フォーク

同期上流リポジトリとアップツーデートそれを維持するために、リポジトリのフォークの同期と呼ばれるこのプロセス。残念ながら、GitHubには自動同期機能はありません。しかし、サーバー上でcronジョブとして追加するのは簡単なので、手動で行う必要はありません。例えば:

cd/srv/mirrorrepo; git上流マスタを取得します。 gitのプッシュ原点マスター

後プラグインは

https://github.com/trilbymedia/grav-plugin-git-sync

関連する問題