2009-09-03 16 views
2

ローカルコンピュータから定期的にコミットするGitHubにリポジトリがあります。反対側で私はサーバーがリポジトリから引っ張ってきた。 Webサーバは、GitHubリポジトリから最新の変更を取得するためにgit pullを実行するだけです。これは完全に自動化されており、そのようにしておくべきです(Ruby Tool Capistranoのような解決策は出ています)。リモートサーバーから最新のリビジョンのチェックアウトを強制するにはどうすればいいですか?

単純なgit pullは通常正常に動作します。しかし、時々私は最後のコミット(git commit --amend)とgit pushをGitHubに2回変更します。サーバーがGitHubへの2回のプッシュの間にコードを自動更新すると、マージ競合があるため次のサーバー側git pullが失敗します。

この問題を解決するには、サーバーがgit pull(またはこれと同等のもの)のGitHubリポジトリに進む必要がありますが、マージの競合が発生した場合、GitHubリポジトリはサーバー上のローカルリポジトリ。ですから、git cloneのように動作するgitコマンドが必要ですが、毎回リポジトリ全体をコピーしません。

答えて

6

JBの権利はありますが、私は彼の答えについて少し詳しく説明します。

サーバーに自動的にgit pullを実行させる代わりに、git fetch origin; git checkout origin/masterを実行する必要があります。もちろん、これは、あなたのローカルコンピュータのレポを参照するために "起点"リモートが設定されていることを前提としています。

サーバーソースを直接修正する必要がある場合(クイックフィックスなど)、コミットする前にgit branch -f master origin/masterを使用して、サーバーのマスターブランチを同じコミットに設定することができます。ローカルコンピュータの支店。

+0

私はそれを試みるつもりです。 –

7

ローカルの変更を行わないと強制的にgit checkoutを実行できますが、正しい答えはになります。ローカルリポジトリを残したコミットを決して修正しないでください

+0

私は知っていますが、私は現在、リモートリポジトリの唯一のユーザーだから問題ではないと思います。 –

+2

しかし今、それは重要であると思う。他のコンピュータもユーザであるためです。しかし、あなたはこのように質問をしたので、一度再同期する方法を尋ねていますか? –

+0

リポジトリを扱っている人が1人だけの場合(何人のリポジトリがあっても)、コミットの修正には何も問題はありません。その人が混乱することを心配していない限り、チェックアウト、リセット、強制更新をいつでも実行して、複数のreposを同期させることができます。 –

4

pullソースを変更することはありません。あなたがしたいことは、ちょうどfetch、次にcheckoutです。

関連する問題