ぐるのなんか

多分ゲームのプレイ日記とか

ForkでSJIS(CP932)のファイルが文字化けする

GitのGUIクライアントとしてForkを愛用してるんですが、
SJISで書かれたファイルの扱いがどうにもならなくて四苦八苦した際の備忘録的なやつです。

Forkとは?

チェコ共和国で開発されているらしいGit用GUIクライアントです。
fork.dev
リポジトリをフォークするのとはそんなに関係ないはず。
モダンなUIで負荷も軽め、面倒な登録なんかも不要で、コミットに載せるメールアドレスと名前を訊かれるだけです。

また私的利用・商用利用ともに無料で使えるありがたいツールです。

This Freeware License Agreement (the "Agreement") is a legal agreement between you, the end-user,
and Danil Pristupov for the use of this software product ("Software"). Commercial as well as non-commercial use is allowed, free of charge.

*1*2

環境

OS:Windows10 Home 1909
Fork:1.45.0.0

本題

問題

そんなありがたいツールであるForkですが、リポジトリ内で扱う文字コードをFork内の設定で変えられないという問題があります。
というのもGitの標準がUTF8らしいので、SJISなんかで書かれたファイルを扱うと画面上で化けます。

f:id:devgruHT:20200224021725p:plain
ふが.txt
f:id:devgruHT:20200224021756p:plain
化けました
普段から文字コードをUTF8に設定するように心がけていれば問題とも言えないようなことですが、
仕事の都合上なんかでどうしてもUTF8以外の文字コードで書かれたファイルを扱わなければいけない時にしんどいですね。
SourceTreeなんかでは使用する文字コードSJISに変更したりできるんですが、あれはコミットコメントなんかもSJIS扱いになってしまったような…試したのはだいぶ前の話なのでうろ覚えですが

解決策

Gitの設定を変えてSJISで書かれたものをUTF8に変換して表示するようにします。
といってもコンソールの扱いに慣れていないため、設定ファイルを直に書き換えていきます。
参考にしたのはこちら
qiita.com

設定ファイルどこにあるの

Forkは内蔵Gitの設定ファイルを参照しているようなので、ユーザー単位で一括で変更を適用したい場合は以下のパスの設定ファイルを弄ります。

C:\Users\%USERNAME%\AppData\Local\Fork\gitInstance\2.24.1\etc

「2.24.1」は内蔵Gitのバージョンを示しているので、Forkのバージョンによっては変わるかも知れません。
リポジトリ単位で設定変えたい場合は、下記のgitconfig節の内容をリポジトリ直下の.git\configファイルに、
gitattributes節の内容をリポジトリ直下に.gitattributesファイルを作ってそこに記述します。

gitconfig

以下の内容を追記します。
SJISとか上で書いてますが正確にはCP932で書いたファイルなので、ここでの文字コードの指定はCP932です。

[diff "cp932"]
	textconv=iconv -f cp932 -t utf-8

f:id:devgruHT:20200224025735p:plain
gitconfig
ググってるとiconvはGit Bash for Windowsに含まれるのでそれをインストールして~とか出てきたんですが、
Forkの内蔵GitはGit Bashを含んでるので気にしなくていいです。

gitattributes

以下の内容を追記します。

*.(変換したいファイルの拡張子)   diff=cp932

f:id:devgruHT:20200224025744p:plain
gitattributes

結果

Forkの画面を見てみましょう。
f:id:devgruHT:20200224030344p:plain
git diffで取得してきたと思しき内容がちゃんと化けずに表示されました。

課題

化けずに表示出来てめでたしめでたしという訳ではなく、
参考記事にも書かれていますが課題が残っています

git add -p

Forkでは「git add -p」コマンドのように変更箇所の一部だけstage、unstageできるんですが、
上記の対応を行った後だとStageボタン押したときにエラーになります。
f:id:devgruHT:20200224033812p:plain
この記事書こうと思い至った時に出たエラーと、記事書くために作ったリポジトリとでエラーの内容が違ってアレッとなったのでここに詳しくは書きませんが、とりあえずGUI上からはまともにstageできない状態です。
最悪コンソール上での文字化け対応をして、コンソール上でgit add -pコマンド使って対応って感じでしょうか(これだとエラーにならない)。

結論

面倒くさいことになりたくなかったらUTF8で書こうな!

*1:https://fork.dev/license

*2:記事書いてる途中で調べものしてて気付いたんですが有償化するらしいですね どうすっかな github.com