マージの競合を視覚的に比較および解決するためのツールの概要

すでに、分散バージョン管理システム( DVCS )、それらの比較、およびそれらのGUIクライアントの比較に関する多くの記事がありました。 gitとmercurialを操作するためのIDEプラグインについても議論されています。 しかし、視覚的な比較ツールとマージの競合の解決に関する情報はほとんどありませんでした

差分とマージ
最近、私は水銀(まだ便利で論理的だと思う)からgitに「ジャンプ」しました。なぜなら、私が興味を持っているプロジェクトの大半はgitを使用しており、githubでホストされているからです。 この点で、ツールの備蓄を改訂するという問題、特に視覚的な比較とマージ(diffとmerge)のためのツール選択に関する問題が生じました。 ハブの情報不足を補うために、このミニレビューを書くことにしました。 彼らが言うように-熱い追求で。

カットの下には、DiffMergeおよびWinMerge for Windowsで使用するGit設定の例もあります。 多くの人が時間を節約すると思います。
役職特徴プラットフォーム

キフ3


http://kdiff3.sourceforge.net/

[ スクリーンショット ]
このツールは、gitユーザーとMercurialシステムのユーザーの両方が遭遇する可能性が最も高いですが、2、3行は問題ありません。

長所
  • 無料
  • 三者合併をサポート。
  • ディレクトリを比較できます;
  • 異なるエンコーディングでうまく動作します。

短所
  • 追加なしの構文強調表示はありません。


注: TortoiseHgでインストールします。
Windows、Mac OS X、Linux

拡散


http://www.sourcegear.com/diffmerge/index.html

[ スクリーンショット ]
長所
  • 無料
  • 三者合併をサポート。
  • ディレクトリを比較できます。

短所
  • キリル文字を使用すると問題が発生します。 時間が経つにつれて、彼らはそれを修正すると思います。
  • DiffMergeは、デフォルトでは、プログラミング言語の構文強調表示をサポートしていません。


Windows、Mac OS X、Linux

ウィンマージ


http://www.winmerge.org
http://ru.wikipedia.org/wiki/Winmerge

[ スクリーンショット ]
長所
  • オープンソース
  • エンコーディングに問題はありません。
  • 不要なジェスチャーなしの構文強調表示。
  • ディレクトリ比較。

短所
  • マージツールは双方向であり、場合によっては不便です。
  • Windowsのみ。

:私はずっと前に(mercurialとgitを使い始める前でさえ)このツールを使い始めました。ほとんどの場合、マージツールが両面であるという事実は特に不便なことはありません。

溶ける


http://meld.sourceforge.net/

[ スクリーンショット ]
長所
  • GPL v2;
  • 双方向および三方向のファイルマージ。
  • ディレクトリ比較;
  • 構文の強調表示(インストールされているGtkSourceViewを使用)。

短所
  • Windowsでのインストールには、Python、GTK +、Glib、GtkSourceViewをインストールする必要がありますが、誰もが好きではありません。

Windows、Mac OS X、Linux
Windowsのインストール手順:
https://live.gnome.org/Meld/Windows

拡散


http://diffuse.sourceforge.net/

[ スクリーンショット ]
長所
  • GPL
  • 2-way、3-way、n-way(任意のファイル数)マージのサポート。
  • 構文強調表示;
  • UTF-8でうまく機能します。
  • 取り消しの深さは無制限(元に戻す);
  • 便利なコードナビゲーション。

短所
  • おそらくディレクトリを比較できない。

:WindowsでGit Bashを使用してgit mergetoolコマンドを使用してマージすると、4番目の「追加」ウィンドウが開きます。
config cを調整することで削除できます:/ Git / libexec / git-core / mergetools / diffuse
Windows、Mac OS X、Linux
:Windowsにインストールする場合、既にすべての依存関係(Meldとは異なります)、つまりPythonとPyGTKパッケージが含まれています。

TKDiff


http://sourceforge.net/projects/tkdiff/

[ スクリーンショット ]
長所
  • GPLv2;
  • 違いにブックマークを追加できます。
  • エンコーディングで問題なく動作します。

短所
  • インターフェースは他の製品に比べて利便性が低く、見た目が非常に悪い(スクリーンショットを参照)
  • 構文の強調表示なし。
  • ディレクトリを比較する方法を知りません。

Windows、Mac OS X、Linux

スマートシンクロナイズ


http://www.syntevo.com/smartsynchronize/index.html

[ スクリーンショット ]
長所
  • 三角合併;
  • エンコーディングに問題はありません。
  • ファイルに加えて、ディレクトリを比較できます。

短所
  • 商用利用にはライセンスが必要です。
  • プログラミング言語の構文強調表示はデフォルトでは提供されていません。 何かができる可能性があります。

:SmartySynctonizeは、Gitを操作するための便利なGUIツールであるSmartGitに組み込まれています(非営利目的でも無料)。
Windows、Mac OS X、Linux

比較を超えて


http://www.scootersoftware.com/
http://en.wikipedia.org/wiki/Beyond_Compare

[ スクリーンショット ]
長所
  • 三角合併;
  • ファイル、ディレクトリ、リモートディレクトリ、アーカイブ、MP3ファイル、画像などを比較できます。ただし、最後のポイントは原則として必要な機能ではありません。

短所
  • ShareWare;
  • Macバージョンはありません。

Windows Linux

Araxis merge


http://www.araxis.com/merge/

[ スクリーンショット ]
長所
  • 三角合併;
  • エンコーディングに問題はありません。
  • ハイライト構文
  • ファイルに加えて、ディレクトリを比較してそれらを同期できます。
  • 大きなファイル(ギガバイト)と大きなディレクトリの比較に適しています。
  • 比較結果に基づくレポート生成。
  • リボンインターフェイス (プラスと呼ぶことができる場合)。

短所
  • ShareWare;
  • Linux用のバージョンはありません。

:コメントでは、多くの人がこのツールを高く評価し、助言していますが、コストは高くなります。
Windows Mac OS X

原則として、リストされているツールはすべてうまく機能しており、このレビューは議論のテーマではありません。 誰もが味わう楽器を選択します。
以下は、DiffMergeおよびWinMergeを操作するためのGit設定の例です。 同様に、Gitと他のツールとの相互作用を構成できます。


GitとDiffMerge


1)ディレクトリc:/ Git / libexec / git-core / mergetools /に追加します
次のようなdiffmergeファイル:

diff_cmd () { "c:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 } merge_cmd () { "c:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe" \ --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE" >/dev/null 2>&1 status=$? } 

2)ファイルc:/Users/swipe/.gitconfigに追加します
次の行:

 [diff] tool = diffmerge [merge] tool = diffmerge [mergetool "diffmerge"] cmd = "diffmerge" trustExitCode = true 

3)競合を作成し、DiffMergeを呼び出して解決します

 git init //      readme.txt git add . //      git commit -m "empty readme" //   git branch new //    git checkout new //         readme.txt git add . //     git commit -m "new string" //      git checkout master //   master      readme.txt git add . //     git commit -m "master string" //   git hist --all //    

木

 git difftool master new //    

diff

 git merge new //    new   master 

対立

マージの競合に関するメッセージが表示されますが、これが求められています。

 git mergetool //    

併合する

中央のウィンドウで、ファイルを目的の状態にし、変更を保存します。
競合が解決しました。
DiffMegreは、ここで設定をスパイしました。
http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/


GitとWinMerge


1)ディレクトリc:/ Git / libexec / git-core / mergetools /に追加します
次のようにwinmergeファイル:

 diff_cmd () { "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 } merge_cmd () { "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$? } 

Gitが変更を自動的にマージできない場合、マージの競合が発生し、マージトークンが競合するファイルに追加されます(<<<<<<<、=======、および>>>>>>>)。 これらは、サードパーティのツールを使用して競合を解決するために必要です。
上記の例のマスターブランチと新しいブランチをマージした結果として形成されるreadme.txtファイルを考えます

 <<<<<<< HEAD master str ======= new str >>>>>>> new 

WinMergeを使用して競合ファイルを開き、競合を解決できます。

開く

この後、双方向マージツールが開きます。

ウィンマージ

説明したロジックに基づいて、merge merge_cmdコマンドを次のように書き換えます。
 merge_cmd () { "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? } 

実際、上記のオプションは両方とも同等です。

2) .gitconfigの編集
 [diff] tool = winmerge [difftool "winmerge"] cmd = "winmerge" [merge] tool = winmerge [mergetool "winmerge"] cmd = "winmerge" trustExitCode = false keepBackup = false 

最後の行は、リポジトリディレクトリへのバックアップファイルの保存をキャンセルします。

3)2つのブランチをマージするときに競合を作成しましょう(DiffMergeを使用した例を参照)。
 git difftool master new //    

ウィンディフ

ブランチをマージするときに競合を解決するには、次のコマンドを使用します
 git mergetool 

ウィンマージ

ファイルを編集しましょう。 変更を保存すると、競合は解決されます。
WinMergeの設定はここで見張られています:
http://stackoverflow.com/questions/636253/msys-git-merge-tool-command-options-issue

Source: https://habr.com/ru/post/J150001/


All Articles