26

チームの他の誰かが特定のファイルを変更したときに GitHub からプルすると、Git コマンドは、Git が修正できなかった未解決の競合があることを示します。競合を修正するために Perforce または Visual Studio 2012 を開くと、グラフィカル ツールは競合がないことを示し、マージをすばやく実行します。

Git には、セットの mergetool/difftool とは独立した内部競合検出/マージ ツールがありますか?

または、構成済みのツールを使用して自動マージし、解決できない競合を検出しますか?

私のシナリオは奇妙です.Gitは自動マージできないことを示していますが、グラフィカルツールは問題を示していません.

4

4 に答える 4

15

Git には、 とは独立した内部マージ システムがありdifftoolます。とにかく、マニュアルからオプションmerge strategyを使用して指定できます:-s

-s <strategy>
--strategy=<strategy>

指定されたマージ戦略を使用します。試行する順序で指定するために複数回指定できます。-s オプションがない場合は、代わりに組み込みの戦略リストが使用されます (単一のヘッドをマージする場合は git merge-recursive、それ以外の場合は git merge-octopus)。

戦略は単純なFastForwardものからOctopus、多くのツリーをマージするときのものまであります。この回答をチェックして、さまざまmergeな戦略がどのように機能するかを確認してください。

とにかくあなたのシナリオは奇妙です。IDE が別のマージ戦略を使用している可能性があるため、IDE を開くと正しい方法でマージが行われます。

于 2013-07-15T14:39:16.500 に答える
2

はい、多くの IDE とマージ ツールが、git 自体に加えて自動化された競合解決を行います。

に見られるようにgit help merge-file、テキスト ファイルに対する git のストック コンフリクト解決アルゴリズムは非常に単純です。diff チャンクは、隣接する行が変更された場合にコンフリクトします。git がこの方法で競合を自動解決できない場合、テキスト競合マーカーを RCS の時代から標準であり、IDE が検出して処理できる形式で配置します (そうでない場合でも)。 gitについて知っている):

<<<<<<<< バージョン識別子 1
フー
=======
バー
>>>>>>>> バージョン識別子 2

私は Visual Studio を使用していませんが、簡単な Google によると、自動競合解決機能があることがわかりました。(私自身は、独自の自動競合解決アルゴリズムを持つ kdiff3 を使用しています)

于 2013-07-26T10:43:38.067 に答える
1

ここでの投稿は、git マージ戦略で私が見た最良の回答です。そして、はい、あなたはあなたが望むものを選択することができます-s option

しかし、git ができないのに、Visual Studio のような他のツールがなぜそれをマージするのかという疑問があります。Visual Studio はかなり積極的なマージ戦略を持つことができます。「自動マージ機能の既定の設定では最新のファイルが優先されるため、通常、自動マージ機能は古いバージョンのコンテンツを使用しません」詳細については、こちらを参照してください。

VS 2012 に付属するマージ ツールの詳細については、Brian Harry が「マージ時の競合を最小限に抑える」ことを重要な機能としてどのように考えているかについて詳しく説明しているこの投稿を参照してください。

Perforce に関しては、似たようなマージ戦略を持っているのではないかと思います。git から p4 へのコネクタは、perforce マージ戦略を使用して把握している必要があり、それらもより積極的であると確信しています。

「ours」は、git での同様に積極的なマージ戦略である可能性があります。

しかし、要するに、各製品は独自の統合戦略を使用しており、多かれ少なかれ積極的なものもあります。それは、ユースケースと許容されるニーズによって異なります。

于 2013-07-26T22:57:30.197 に答える