レポジトリのURL変更に伴うSubversiveの設定変更方法メモ
Subversionサーバの変更に伴うアドレス変更
「さくらのVPSにUbuntu 10.04 64bitをインストールしてSSHで接続するまでのメモ」においてさくらのVPSにSubversionサーバを移行しました。つまり、URLが変わってしまったわけで、Eclipse側(Subversive)の設定変更が必要になりました。
Subclipseの設定変更
今回はSubclipseじゃなくてSubversiveの話です。
ただURLが変わっただけで、レポジトリもコピーしただけなので、単純にURLを変えたいのですが、こういう場合に、どこを変更すればいいのかというと、プロジェクトエクスプローラではなくて「SVNリポジトリー」ウィンドウです。
変更したいレポジトリを右クリックして「ロケーションプロパティ」をクリックします。すると、URLの設定などが改めて行えます。
まとめ
プロジェクトエクスプローラからそのプロジェクトだけ変更みたいなことは出来ないようです。
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応
コードを比較したら全行変更有りと表示されたとき
eclipseのCompare With(比較, svn diff)でソースコードの比較を行おうとしたところ、変更箇所が指摘されるはずが、ソースコード全体(全行)に変更があると表示されてしまいました。
ソースコードを二つ表示して目で見て比較してみると、変更が本当に加えられている場所はほんの一部で、全部変更なんてあり得ません。ましてや、プログラムのソースファイルの場合、全く違うファイルを比較したとしても、中括弧だけの行などが同じ行として認識されて、全行変更なんて状態にはまずなりません。
原因・対策
こうなってしまったときは、おそらく原理上、改行コードの不一致しか考えられません。eclipseで言えば、改行コード(Line Delimiters)の設定がWindowsならCR+LF、UnixならLFを改行と認識します。つまり、改行コードがWindowsのファイルとUnixのファイルでeclipseのcompare withを行ってしまうと、一方には必ずCRがあり、一方には全くCRが無いので、全行不一致という結果になってしまうわけです。
対策は簡単で、片方の改行コードを変更してしまえばOKです。たとえば、プロジェクト丸ごと改行コードを特定の物にしてしまいたい場合は、「File>Convert File Delimiters To」で、改行コードをどれにしたいかを指定し、一括変更が出来ます。
また、新規ファイル作成時に改行コードを適切に変更するためには、プロジェクトを右クリックして「Property」を選択し、「Resource」の「New text file line delimiter」で指定することが出来ます。新規ファイル作成時に個別の指定はおそらく出来ないので、ここで指定を確認しておきます。
改行コードを常に特定のものにしたい場合は、eclipseで利用するファイルの標準改行コードを指定しておくことが出来ます。「Window>Preference」の「General>Workspace>New text file line delimiter」から指定します。 ちなみに、 これらの設定にある「Default」とは、OS標準の改行コードのことを指します。
さて、最後に、今利用しているファイルの改行コードを確認・表示したい場合ですが、eclipse上でファイルを右クリックして「Property」の「Resource」を見ると文字コード(Text file encoding)は有るのですが、改行コードが見当たりません。そこで、「Window>Preference>Show whitespace characters」をONにして、空白やTab、そして改行コードもテキストエディタ上で表示するようにしてしまうといいと思います。すると、Compare Withを行ったとき、「あ、改行コードが一致してないな」と、すぐ分かります。改行コードの表示は、二種類の記号が使われ、それぞれCRとLFを表します。つまり、改行部分に2つ記号が表示されていたらCR+LFでWindowsの改行コード、1つしか記号が表示されていなければLFでUnixの改行コードと言うことになります。
まとめ
改行コードは、ファイルを交換したりする際にも見落としがちなので注意しなくてはいけないですね。
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応
Visual Studio + AnkhSVN で SVN+SSHを行う方法
Visual Studio 2008/2010から、AnkhSVNプラグインを使ってSVN+SSH接続を行う方法をメモ。間違いやすかったり、忘れやすいポイントを中心に書いておきます。
前提
利用するVisual StudioはVisual Studio 2008およびVisual Studio 2010を想定します。また、事前にSSH接続できる(リモート)サーバ上にSubversionレポジトリが作成済みであるとします。また、SSH接続にはputtyを使い公開鍵認証を行う場合を考えます。
AnkhSVNインストール
AnkhSVNのダウンロードページから、AnkhSVNをダウンロードします下の画像のAnkhSVN 2.1.8420がダウンロードリンク。
今回ダウンロードしたのは「AnkhSvn-2.1.8420.8.msi」で、ダブルクリックから64bitOSでも関係なくインストールすることが出来ます。
環境変数の設定
環境変数に次の項目を追加します。
変数名:SVN_SSH
変数値:C:/.../plinkw.exe
このように、環境変数を利用して、AnkhSVNが利用するSVN+SSHクライアントとして、puttyと一緒に配られているplinkw.exeを指定します。ただし、ここで指定するパスでは、「¥(円マーク、バックスラッシュ)」ではなく、「/(スラッシュ)」を利用するようにしてください。これを失敗すると、AnkhSVNを使用するときに、レポジトリを指定したのにも関わらず何も起こらないことになります。
pagentを起動
SSHで公開鍵認証を行う場合、plinkw.exeが公開鍵を利用するように設定する必要があります。これを簡略化してくるのが、puttyに含まれているpagent.exeです。
pagent.exeをダブルクリックで起動するとタスクバーに常駐するので、それをダブルクリックして、鍵一覧画面を表示させます。
「鍵の追加」から、putty用の秘密(.ppk)を指定し、公開鍵の暗号化パスワードを入力します(暗号化している場合)。これで準備完了です。plinkw.exeが自動的に公開鍵ファイルを読み込みます。
Visual Studio 起動
Visual Studio 2008/2010を起動し、「表示>Repository Explorer」をクリックしてRepository Explorerを起動します。そして、下の図のようなボタンをクリックします。
ボタンをクリックすると、レポジトリのURLが求められます。仮に、ユーザ名をuser1、サーバのアドレスをsvn.blog64.fc2.com、サーバ内部でのレポジトリのフルパスを/home/did2/svn/repo1とすると、入力すべきURLは次のようになります。
svn+ssh://[email protected]/home/did2/svn/repo1/
入力してOKをクリックすると、ここまでの設定がうまく行っていれば「Subversion Repositories」のツリーの下に読み込まれたレポジトリが表示されます。
プロジェクトをインポートする
ここまでで、正しくレポジトリに対してSVN+SSH接続が可能であると分かったので、安心してインポートできます。
「ファイル>Subversion>Open from Subversion」をクリックすると、自動的にUrlが先ほど指定したUrlになっており、そのレポジトリ内部が見えます。そこからディレクトリをたどって、ソリューションファイル(.sln)を選択してOpenをクリックします。
あとは、設定を確認してOKを押せば完了です。自動的にチェックアウトが実行されます。おわり。
参考
SSHの関係ない手順については過去エントリ「AnkhSVN導入記 2009年09月版 (1) インストール編」が参考になります。
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応
svn: Malformed network data
Subversive利用時にエラー
Subversiveを利用してコミットを行おうとしたときに、次のようなエラーが発生しました
*** Commit svn commit "D:\........\aaa\bbb" -m "add -I option." svn: Commit failed (details follow): svn: Malformed network data svn: Commit failed (details follow): svn: Malformed network data *** Error (took 00:00.547)
原因の解決
エラーの内容で調べたところ、バージョンの不一致などが原因のようでしたが、いままでコミットでこんなエラーが出たことがなかったので、なんでだろう?と、思いました。
普段と違うところはどう考えてもコミットのコメントである「add -I option.」しか無かったので、まさかと思い、ハイフンを取り除いて「add I option.」としてコミットしてみることに。すると、なんと成功してしまったのです。
内部でどのようなコードが動いているのか分かりませんが、まさか「-I」をオプションとして認識しているってことなんでしょうか。
Subversionのpre-revprop-changeフックに関するエラー
エラー
エラーの内容は、こちら。
SVN: 'Set revision author' operation finished with error: svn: リポジトリが、リビジョン属性を変更できるようにはなっていません。 管理者に pre-revprop-change フックを作成するよう頼んでください svn: リポジトリが、リビジョン属性を変更できるようにはなっていません。 管理者に pre-revprop-change フックを作成するよう頼んでください
このエラーは、Eclipse用プラグインSubversiveを利用してレポジトリへのコミットを行ったときに発生したものです。とりあえず、「pre-revprop-change」ファイルが無いことが問題なので、次のようにして作成しました。
pre-revprop-changeファイルを作成する
作成と言っても、デフォルトファイルpre-revprop-change.tmplがhooksディレクトリにあるので、レポジトリのディレクトリに移動して、
cp hooks/pre-revprop-change.tmpl hooks/pre-revprop-change
のようにコピーするだけです。簡単ですね。
エラー再び
とりあえず、pre-revprop-changeファイルを作成することには成功しましたが、コミット時にまたもやエラーが。
SVN: 'Set revision author' operation finished with error: svn: 'pre-revprop-change' フックが次のようなエラーを出力して失敗しました: Changing revision properties other than svn:log is prohibited svn: 'pre-revprop-change' フックが次のようなエラーを出力して失敗しました: Changing revision properties other than svn:log is prohibited
今度は、少しエラーの内容が異なります。ここで気がついたのですが、実はコミット時に、Subversionで簡単に使えるとある機能を使っていました。それが原因でした。
その機能とは、コミットするユーザ名(Author)を変更(設定)する機能ですこれは、Subclipseでは(おそらく)できない機能ですやりかたは簡単で、レポジトリの設定(レポジトリプロパティ)の「Advanced>Override author name with represented below:」に、Authorとして登録したい名前を入力するだけです。たとえば、SVN+SSHを利用しているときは、SSHのログインユーザ名でコミットしてしまいますが、この設定を利用することで好きな名前に変更できます。
さて、これがどうエラーと関係しているかというと、エラー冒頭の「Set revision author」と関係しています。つまり、authorを変更(設定)するときにエラーが発生しているのです。もう少し細かく言うと、実は、pre-revprop-changeファイル内の設定で、authorの書き換えを禁止しているのが問題なのです。そこで、先ほど作成したデフォルトのpre-revprop-changeファイルの
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
の次の行に
if [ "$PROPNAME" = "svn:author" ]; then exit 0; fi
を追加してauthorの書き換えを許可してあげます。これで、Authorを変更(= svn:authorを変更)出来るようになりました。
成果
もう一度コミットしてみると、正しく終了します。そして、Historyでコミットしたファイルを見てみると、たしかにAuthorの欄が設定した名前になっています。めでたしめでたし。
Subversive便利
Authorを手軽に設定できることも便利ですが、そのほかにもSubclipseより便利なところがたくさんありました。細かいところですが、たとえばプロキシサーバを簡単にレポジトリごとに設定できるところや、SVNやSSHの接続ポートを簡単に設定できるところです。Subclipseユーザの型は、是非一度Subversiveを使ってみてくださいただ、SubclipseとSubversiveを一つのeclipseに同時にインストールするのはやめた方がいいです
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応