15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HameeAdvent Calendar 2018

Day 1

gitの差分を見やすくする

Last updated at Posted at 2018-11-30

はじめに

今年もアドベントカレンダーはじまりました!
この記事はHamee Advent Calendar 2018の1日目の記事です。
Hameeのエンジニア(一部デザイナー)が自分の興味あるテーマについて書いていきます。
毎年一緒に参加して盛り上げてくれる皆さんに感謝です :clap:

本題

さて本題ですが、常々思っていたんですがgitの差分を表示する時に「違う、そうじゃない」ってなることが多々あり、何とかしたいと思ったので調べました

サンプルコード

言語はなんでもいいんですがとりあえずPHPにしておきます。
例えば以下のコードがあったとしましょう。

<?php
class Test{
    public function hoge(){
        return 'hoge';
    }

    public function moge(){
        return 'moge';
    }
}

この状態でコミット。
次に以下のように修正したとしましょう。

<?php
class Test{
    public function test(){
        return 'test';
    }

    public function hoge(){
        return 'hoge';
    }
}
  • やったこと
    • mogeメソッドの削除
    • testメソッドの追加

これをgit diffで見ると以下のようになります

 class Test{
-    public function hoge(){
-        return 'hoge';
+    public function test(){
+        return 'test';
     }

-    public function moge(){
-        return 'moge';
+    public function hoge(){
+        return 'hoge';
     }
 }
  • この差分表示を見ると
    • hogeメソッドをtestメソッドに変更
    • mogeメソッドをhogeメソッドに変更

っていうように読み取れる

違う、そうじゃない

hogeメソッドは一切触っていないのにさも修正があったように見えて、開発者本人ならともかく第三者が見たら混乱するでしょう。
こんな時にぴったりのオプションがあります

git diff --histogram or git diff --patience

このオプションを使って差分を表示すると以下のようになります

 class Test{
+    public function test(){
+        return 'test';
+    }
+
     public function hoge(){
         return 'hoge';
     }
-
-    public function moge(){
-        return 'moge';
-    }
 }

この差分であればtestメソッドを追加、mogeメソッドを削除、hogeメソッドに関しては差分なし、というのがはっきり分かります:smile:

まとめ

差分を検知するアルゴリズムを指定することでより人間に分かりやすい表示となります。
git diff --histogramgit diff --patienceの違いは正直良く分かっていません(詳しい方補足お願いします)
アルゴリズムの詳しい挙動も良く分かっていないので場合によっては意図しない差分表示になるかもしれません。
この辺はもう少し勉強してみます。
惜しむべきは弊社でプルリクとかのやりとりに使っているbitbucketでは対応していないということでしょうか…
プルリクもdiffのアルゴリズムを指定できるようになると更に捗りそうだなーと思っています。
Atlassianさんご検討よろしくお願いしますw

参考

Git - git-diff Documentation
https://git-scm.com/docs/git-diff

おわりに

アドカレ4年目です。
Qiitaではゴミ記事問題などありましたが、知識をアウトプットしていくことはとても大事なことなのでこの文化だけはなくなってはいけないと思っています。
Qiitaでなくても良いし技術ブログでなくてもいい、とにかくアウトプットした方が絶対に成長できます。
皆さんも積極的にアウトプットしていきましょう!
ではこの後もHameeのアドカレをお楽しみに!

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?