0

Java の Git Api (Egit および JGit) を使用して、リモート Git リポジトリ (GitHub) と変更を同期したいと考えています。これどうやってするの?これは、2 つのリビジョン間の HEAD ID を知ること、または他の方法で可能ですか?

4

1 に答える 1

2

2 つのリポジトリのそれぞれを知るだけHEADで、それらが同期していないかどうかを判断するには十分ですが、どちらが先に進んでいるかを判断するには十分ではありません。一般的なケースでは、複数の人がリポジトリにプッシュできるため、ローカル リポジトリが常にリモート リポジトリよりも先にあると仮定することは賢明ではありません。API を使用して最初の一般的な SHA を見つけ、それを使用してリポジトリの同期を処理する方法を決定する必要があります。3 つの (実際にはそれ以上の) ケースを処理する必要があります。

  1. あなたのローカルブランチはあなたのリモートよりも進んでいます
  2. あなたのリモコンはあなたのローカルよりも進んでいます
  3. ローカルとリモートの両方に、他にはない一連のコミットがあります。たとえば、あるコンピューターからプッシュしたが、ここではプルしなかった、または他の誰かが最近コミットをプッシュしたのに気付かなかったなどです。

最初の 2 つのケースは些細なことですが、3 番目のケースははるかに複雑です。ローカルの変更をリモートと同期するには、常にプルする必要があり、プルするとマージの競合が発生する可能性があります。注意しないと、競合が発生したときにコミットを強制しようとして、一部のコードが壊れる可能性があります。

于 2013-09-02T13:50:09.167 に答える