dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

follow us in feedly

Mac El CapitanでSVNの日本語ファイル名問題を解決する

MacSVN を使っていると直面する、日本語ファイルの扱いがうまくいかない問題について。
2016年2月時点での最新OS である OS X El Capitan (10.11.2) だとちょっと手間取ったのでメモ。

はじめに、日本語ファイル問題についての説明はこちらの記事が詳しい。

以下、引用させていただくと

Subversionは内部の処理をUTF-8で行い、クライアント環境での文字コードに合わせて適切なコードに変換してから処理を行っています。
けれどもOS Xファイルシステムでは、実際には「UTF-8-mac」というUTF-8そのものとは少し異なるコードを用いているにも関わらず、Subversionでは「UTF-8」と判断してしまう有名な問題があります。「UTF-8-MAC問題」、と言われている問題です。

本問題により、日本語のファイル名、とくに濁点「゛」や半濁点「゜」を用いたファイルのステータスを見ようとすると、

% svn st  
 ? パッチファイル.txt  
 ! パッチファイル.txt  
%  

というように、ファイルの存在を正しく取り扱えません。

自分の PC でもこれが発生していた。


ググって出てきた解決策と、El Capitan における問題

調べてみると、この問題を回避するパッチ --unicode-path を当てた SVN をインストールしてそちらを使えばいいらしい。
また、インストールには Homebrew を使った方法と MacPorts を使った方法があり、それぞれ

1. Homebrew を使った方法

参考:[http://blog.pg1x.com/entry/2014/08/20/000047:title]

$ brew tap homebrew/versions
$ brew install subversion17 --unicode-path
2. MacPorts を使った方法

参考:MACでのSubversion日本語対応 - Qiita

$ sudo port -v install subversion +unicode_path

でいけるとのこと。

というわけで、普段パッケージ管理には Homebrew を使っているので 1 の方法を試してみたが、以下のようなエラーが出る。

$ brew tap homebrew/versions
$ brew install subversion17 --unicode-path
==> Installing subversion17 from homebrew/versions
subversion17: This formula either does not compile or function as expected on OS X
versions newer than Yosemite due to an upstream incompatibility.
Error: An unsatisfied requirement failed this build.

どうやら El Capitan だと subversion17 はインストールできないよう。
なので、MacPorts によるインストールを試すことにする。


MacPortsSVN をインストールする

MacPorts をインストール

MacPorts 自体インストールされてなかったようなので以下のサイトからインストールする。
https://www.macports.org/install.php

インストール後、自分の PC では(zsh を使っているからか)PATH が自動的に設定されなかったので、手動で指定する。
~/.zshrc を開き、

export PATH="/opt/local/bin:$PATH"

とした。

port コマンドにパスが通っていることを確認。

$ which port
/opt/local/bin/port
回避パッチをあてた SVN をインストール

上に書いたコマンドを実行する。

$ sudo port -v install subversion +unicode_path

念のため、/usr/bin/svn ではなくインストールした方が使われていることを確認する。

$ which svn
/opt/local/bin/svn

これで問題が発生していたリポジトリをチェックアウトしなおしたらうまくいきました。