MacにsvnX(SVNクライアント)を入れて作業していたら想定外の挙動が発生し解決したのでメモ
はじめに
macのsvnXを利用していて突然Lockができなくなったとか、Commitしても無反応という方向けでかつ
brewでパッケージ管理をしている方向けの記事となります
背景
取引先のベンダー様がWindows環境で設計書を作成しSVNで設計書をデータ管理している。
私はMacを使って設計書をSVNから取得し必要に応じて更新をMacから行わなければならなくなった。
昔はWindows主流だった私も今の会社に入ってからオンリーMacになったので
WindowsではTortoiseSVNを使っていたなぁ・・とか思いながら
MacでSVNかよ・・・!
って思いながらも、FreeのsvnXを入れることに。
最初はsvnXをインストールし問題なく動いているように見えたが、突然SVNサーバ上のファイル編集(Lock→Edit→Commit)
がうまくいかなくなり途方にくれた。どうにか解決したので調べた事をメモしています。
問題の内容と調査
問題
ある日svn lockが突然動かなくなる
% svn lock バッチ設計.xlsx
svn: E155010: The node 'xxxxxxxxxxxxxxxxxxxxxxバッチ設計.xlsx' was not found.
あれ?って思って指定したファイルをフルパスとか、リポジトリ取り直しとかやったらLockがなんとなく動くようになったが
Commitができない!?という状態になった。
事象イメージ
1) 以下コマンドでLockを取得
svn lock バッチ設計.xlsx
2) ロックした対象ファイルをクリックして開いて編集
3) 以下コマンドでCommit
svn commit -m "修正しました。"
→ しかし無反応。
本来であれば
Sending バッチ設計.xlsx
Transmitting file data .
Committed revision xxxx.
といった表示が出るのに・・
4) svn statusで確認すると以下のようになる
svn status
? バッチ設計.xlsx
! K バッチ設計.xlsx
→ ? とか !とか表示されている。同じファイル名が2行表示される。なんだこれ?
どうやらファイル名が正しく認識していない状態?
そして K というのがLockを表すのだがLockはできているという矛盾。わけわからん。
5) svnX上でもみてみるとこんな感じになる。
この例は 設計書というフォルダの配下にバッチ設計とかのフォルダが存在するイメージ
これをみるとわかるようにsvnXが同じフォルダ名なのに二つ認識してしまっている。
!オレンジとか?とかコマンドでも発生しているような色々と意味不明な表示になっていることに今更きづく・・・
もともとmacにsvnXを入れて最初は正常に動いていたので妙な自信があり、原因がわからずハマってしまいました。
そしてググってもmacとsvnとかあんまり出てこない。
そもそもmacでSVNを使うという人が少ない。ニーズが低いのでしょうw
調査
色々と調べてたら以下記事を発見!ありがとうございます。
http://dackdive.hateblo.jp/entry/2016/02/10/191036
対象名称やパスに日本語の濁点が入るとうまくいかないutf8-mac問題というやつなんですねぇ・・知りませんでした。
という自分の無知さを改めて痛感。
ただ、こちらの記事ではsubversion17で、MacPortsの利用を前提としており、
私はbrewでパッケージ管理を行いたかったので別のサイトを検索。すると
以下記事を発見!ありがとうございます。
http://bhind13.com/info/2645/
おぉ!これだ!ということで、試してみる事に
私の環境
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1611
% xcodebuild -version
Xcode 8.2.1
Build version 8C1002
% pyenv --version
pyenv 20160422
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1611
% xcodebuild -version
Xcode 8.2.1
Build version 8C1002
% pyenv --version
pyenv 20160422
※pyenvはいれておかないと詰む可能性があるので注意です。入れておいた方がいいです
utf8-mac問題対策済のsvnをインストール
brew tap tholu/tap
brew install subversion18 -–with-unicode-path
brew tap tholu/tap
brew install subversion18 -–with-unicode-path
すると
scons: *** SCons version 2.5.1 does not run under Python version 3.5.0.
Python 3 is not yet supported.
Python3は対応していません。ということで、以下を実施
pyenv install 2.7.11
pyenv global 2.7.11
python --version
念のためターミナルを起動しなおし、再度以下を実行
brew tap tholu/tap
brew install subversion18 -–with-unicode-path
無事インストール完了!
ただ、これだけではsvnXとの連動ができないので、続いてsvnXと連動させます。
utf8-mac問題解消済svnコマンドをsvnXと連動させます
1) svnX起動
2) メニューから設定情報を確認(svnのbinのPathを探す)
svnX -> Preferences -> General -> svn binary folder
入力されているPathを確認
3) 対象ディレクトリへ移動(私の環境は以下のPathでした)
cd /Applications/Xcode.app/Contents/Developer/usr/bin
4) 既存のXcodeに存在するsvnコマンドの存在を確認
ls -trl svn
-rwxr-xr-x 1 root wheel 297792 Dec 16 2016 svn
5) 既存のXcodeに存在するsvnコマンドを退避
mv svn svn.backup
mv: rename svn to svn.backup: Permission denied
sudoを忘れて実行しちゃうとこうなります ということでsudoして再度実行
sudo mv ./svn ./svn.backup
ls -trl svn*
-rwxr-xr-x 1 root wheel 61696 Dec 16 2016 svnmucc
-rwxr-xr-x 1 root wheel 36256 Dec 16 2016 svnversion
-rwxr-xr-x 1 root wheel 93872 Dec 16 2016 svnbench
-rwxr-xr-x 1 root wheel 105968 Dec 16 2016 svnadmin
-rwxr-xr-x 1 root wheel 297792 Dec 16 2016 svn.backup <ーーー退避されたのがこれ
-rwxr-xr-x 1 root wheel 82752 Dec 16 2016 svnsync
-rwxr-xr-x 1 root wheel 56960 Dec 16 2016 svndumpfilter
-rwxr-xr-x 1 root wheel 81904 Dec 16 2016 svnrdump
-rwxr-xr-x 1 root wheel 104592 Dec 16 2016 svnserve
-rwxr-xr-x 1 root wheel 63456 Dec 16 2016 svnfsfs
-rwxr-xr-x 1 root wheel 90160 Dec 16 2016 svnlook
6) svnversion18 --with-unicode-pathでインストール済みのsvnのパスを指定する
% sudo ln -s /usr/local/bin/svn ./svn
※事前にbinのパスはwhichで確認しておくことが必要です。私の場合svnversion18は /usr/local/bin/svn に格納されていました。
7) svnコマンド確認
% ls -trl svn*
-rwxr-xr-x 1 root wheel 61696 Dec 16 2016 svnmucc
-rwxr-xr-x 1 root wheel 36256 Dec 16 2016 svnversion
-rwxr-xr-x 1 root wheel 93872 Dec 16 2016 svnbench
-rwxr-xr-x 1 root wheel 105968 Dec 16 2016 svnadmin
-rwxr-xr-x 1 root wheel 297792 Dec 16 2016 svn.backup
-rwxr-xr-x 1 root wheel 82752 Dec 16 2016 svnsync
-rwxr-xr-x 1 root wheel 56960 Dec 16 2016 svndumpfilter
-rwxr-xr-x 1 root wheel 81904 Dec 16 2016 svnrdump
-rwxr-xr-x 1 root wheel 104592 Dec 16 2016 svnserve
-rwxr-xr-x 1 root wheel 63456 Dec 16 2016 svnfsfs
-rwxr-xr-x 1 root wheel 90160 Dec 16 2016 svnlook
lrwxr-xr-x 1 root wheel 18 Sep 15 10:42 svn -> /usr/local/bin/svn <ーーー置き換えたのがこれ
8) svnXを再起動
イメージ図は色々と塗りつぶしてますがオレンジとかの表示がなくなったのがわかりますね。
これで濁点付きのファイルでも、Lock→Edit→Commitが無事svnXでできるようになりましたので
- 編集したいファイルをsvnX上で右クリックして"Lock"
- ファイルを編集
- "Refresh"ボタンを押してsvnX上の画面を再表示
- 右上にある"Commit”ボタンを押すとコメント入力欄が起動
※もし編集間違えてして行ってしまったり、Conflictとか発生しちゃっても真ん中にある"Revert"を押せば元通りです。
macでもsvnXでそれなりに快適にSVNクライアントとして活用できるということを実感!!
おまけ
最初の記事を勘違いし
subversionの最新版でやればいいんだろうと勝手に思い以下コマンドを実行したらbrew installが成功してしまうが
utf8-mac問題は全く解消されずさらに混乱しました。
brew install subversion --unicode-path
→ エラーにならない!なんでだよ!
brew installでは存在しないオプションとかを指定してもエラーにならない!?みたい。
以下 brew info で確認しても --unicode-path というオプションはありません。そりゃそうだ
% brew info subversion
subversion: stable 1.9.7 (bottled)
Version control system designed to be a better CVS
https://subversion.apache.org/
/usr/local/Cellar/subversion/1.9.7 (203 files, 22.3MB) *
Poured from bottle on 2017-09-15 at 09:35:25
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/subversion.rb
==> Dependencies
Build: pkg-config ✔, swig ✘, scons ✔
Required: apr-util ✔, apr ✔, sqlite ✔, openssl ✔
Optional: gpg-agent ✘
==> Requirements
Recommended: perl >= 5.6 ✔
Optional: python ✘, java ✔
==> Options
--with-gpg-agent
Build with support for GPG Agent
--with-java
Build Java bindings
--with-python
Build with python support
--without-perl
Build without Perl bindings
--without-ruby
Build without Ruby bindings
==> Caveats
svntools have been installed to:
/usr/local/opt/subversion/libexec
The perl bindings are located in various subdirectories of:
/usr/local/opt/subversion/lib/perl5
If you wish to use the Ruby bindings you may need to add:
/usr/local/lib/ruby
to your RUBYLIB.
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
subversion18の --with-unicode-path が存在するか念のため確認
% brew info subversion18
tholu/tap/subversion18: stable 1.8.16 (bottled)
Version control system
https://subversion.apache.org/
Not installed
From: https://github.com/tholu/homebrew-tap/blob/master/subversion18.rb
==> Dependencies
Build: pkg-config ✔, apr-util ✔, scons ✔
Required: sqlite ✔, openssl ✔
Optional: gpg-agent ✘
==> Requirements
Optional: python ✘, java ✔
==> Options
--universal
Build a universal binary
--with-gpg-agent
Build with support for GPG Agent
--with-java
Build Java bindings
--with-perl
Build Perl bindings
--with-python
Build with python support
--with-ruby
Build Ruby bindings
--with-unicode-path <ーーこれ
Build with support for OS X UTF-8-MAC filename
==> Caveats
svntools have been installed to:
/usr/local/opt/subversion18/libexec
ということでbrew installのコマンドはオプションとかのtypoを注意して打たないとダメですね。と思いました。
Author And Source
この問題について(MacにsvnX(SVNクライアント)を入れて作業していたら想定外の挙動が発生し解決したのでメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/ynarasak/items/73775c70b2bbb634cabb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .