Help us understand the problem. What is going on with this article?

git の差分比較・マージを WinMerge で行う

More than 3 years have passed since last update.

概要

git diff ってやるとこういうふうに出る差分を

> git diff
diff --git a/main.cpp b/main.cpp
index 198f012..6e1f7d5 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,7 +4,8 @@
 int main()
 {
        A a;
-       printf("%X", &a);
+       printf("address = %X", &a);
+       hello();
        hello();
     return 0;
 }

WinMerge によってグラフィカルに確認・編集できるようにする。

Image2.png

同様にマージ作業も行えるようにする。

merge2.png

環境について

今回の環境を参考までに。

  • Windows 7 Home Premium 64bit
  • WinMerge 2.4.0.68+-jp-68 (Japanese Unicode X64)
  • git version 2.6.4.windows.1

設定方法

{ユーザディレクトリ}/.gitconfig に以下を追記。

[diff]
    tool = WinMerge
[difftool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -f \"*.*\" -e -u -r \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = WinMerge
[mergetool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -u \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[alias]
    windiff = difftool -y -d -t WinMerge
    winmerge = mergetool -y -t WinMerge

エイリアス名はお好きに。(今回は「windiff」「winmerge」としてみた。ツール名とバッティングしていてややこしいが…)

差分比較

ローカルリポジトリ内で、さきほど付けたエイリアスコマンドを実行。

> git windiff

windiff.png

Image2.png

するとこんな感じに WinMerge で差分比較できる。

ファイルパスはテンポラリディレクトリ内の場所を示しているが、右側の編集は自動的に作業コピーの変更として反映される。

リビジョン指定の比較

以下のようにリビジョン指定の比較も行える。

> git windiff HEAD~~~ HEAD~

revision.png

マージ

まずはコンフリクトの発生する状況を作ってみる。

> git checkout master
> git checkout -b branch1
> echo hello >> main.cpp
> git add . && git commit -m "change1"

> git checkout master
> git checkout -b branch2
> echo world >> main.cpp
> git add . && git commit -m "change2"

> git checkout master
> git merge branch1
Updating ef81702..34d9482
Fast-forward
 main.cpp | 1 -
 1 file changed, 1 deletion(-)

> git merge branch2
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
Automatic merge failed; fix conflicts and then commit the result.

コンフリクトが発生した。
続けてマージツールの起動を行う。(さきほど設定したエイリアス「winmerge」を用いる)

> git winmerge

merge.png

するとこんな感じに WinMerge 上でコンフリクトの解消作業を行うことができる。
一番右側のペインの編集はそのまま作業コピーに反映される。

以上

せっかく Windows を使ってるのだったら豊富なツール群の恩恵をふんだんに享受しましょう。

補足:WinMergeの引数

  • -f "*.*" … 表示するファイルタイプ
  • -e … ESCで閉じれるようにする
  • -u … 履歴に追加しない
  • -r … サブフォルダを含む比較

※どうやら WinMerge は前回比較のファイルタイプを覚えているようで、ファイルタイプ指定を明示的に行わないと、全てのファイル一覧が表示されないことがある。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした