CLIにおけるdiffコマンドは行の削除や追加が縦に並ぶ形になっています。慣れれば理解できないことはないと思いますが、GUIやWebベースの差分ツールでは一般的にサイドバイサイドの差分表示が使われます。この方が人にとっては分かりやすいのでしょう。 そんな差分表示をCLIでも可能にするのがicdiffです。

icdiffの使い方

例えば基本的な表示はこちらです。

$ git diff
diff --git a/app/assets/javascripts/form_builder.js b/app/assets/javascripts/form_builder.js
index 48f486e..689209b 100755
--- a/app/assets/javascripts/form_builder.js
+++ b/app/assets/javascripts/form_builder.js
@@ -363,7 +363,7 @@ $(function() {
                     }
                 });
 
-                select.attr('name', form_builder.cleanName($(this.prefix + 'name').val()) + '[]');
+                select.attr('name', form_builder.cleanName($(this.prefix + 'name').val()));
                 label.text($(this.prefix + 'label').val());
                 select.html(list_options);
             }

これをicdiffを使うようにしてみます。

$ git difftool --extcmd icdiff

Viewing (1/8): 'app/assets/javascripts/form_builder.js'
Launch 'icdiff' [Y/n]: Y
/var/folders/vn/rnq2qddx7cj6ljnr7lnjgw4m0000gn/T//jLmPth_form_builder.js app/assets/javascripts/form_builder.js                           
                            list_options += "<option value=\"" +                              list_options += "<option value=\"" + 
 form_builder.cleanName(val) + "\">" + val + "</option>\n";        form_builder.cleanName(val) + "\">" + val + "\n";      
                        }                                                                 }                                        
                    }                                                                 }                                            
                });                                                               });                                              
                                                                                                                                   
                select.attr('name', form_builder.cleanName($(thi                  select.attr('name', form_builder.cleanName($(thi 
s.prefix + 'name').val()) + '[]');                                s.prefix + 'name').val()));                                      
                label.text($(this.prefix + 'label').val());                       label.text($(this.prefix + 'label').val());      
                select.html(list_options);                                        select.html(list_options);                       
            }                                                                 }                                                    
        },                                                                },                                                       
                                                                                                                                   

このように左右にコードを並べてその違いを確認できるようになります。カラー表示もされますので、一目でどこが違うのか分かるようになります。GitやSubversionはもちろん、通常のファイル同士の比較でも使えますので普段遣いできるツールです。

icdiffはPython製、GPLのオープンソース・ソフトウェアです。

icdiff: side-by-side highlighted command line diffs jeffkaufman/icdiff