Gitで日本語長文のdiffをとる方法
課題
日本語の長文をgitで管理していると、ほんのちょっとの変更でも、diffでは行丸ごと変更されたことになり、変更点がよくわからないことがある。
二泊三日で小説を書く過激なイベントNovelJam 2018参加作品である高橋文樹氏の「オートマティック クリミナル」は、GitHubを使って執筆されている。小説では、git diffの欠点がはっきりでる。高橋氏は参加レポートで、こう書いている。
あと、今回得た重要な知見なのですが、Githubではある程度以上テキストが長くなってくると、数文字の調整で全部差分として判定されたりするので、小説には向いてないかなーと思いました。小説は行の移動とかがよく発生するので、GithubじゃなくてGitとの相性かもしれません。
普通にgit diff
確かに、普通にdiffをとるとその通り。コマンドラインで「オートマティック クリミナル」リポジトリの途中経過diffを
git diff 8ae5f..d0394
上記でとった結果は、以下の通りになる。
文字単位のdiff
同じ変更を、--word-diff-regex
を適切に指定してgit diff
してみる。
git diff --word-diff-regex=$'[^\x80-\xbf][\x80-\xbf]*' --word-diff=color 8ae5f..d0394
すると、このような結果が得られる。文字単位で変更点が把握できるのだ。
なお、git diff --word-diff-regex=.
でも良さそうなものだが、これだと(少なくとも私の環境では)diff部分が文字化けしてしまう。unicodeの文字単位ではなく、byte単位でdiffが取られてしまっているようだ。
GitHubでは--word-diff-regex
相当の設定はできなさそうで残念。