情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

EclipseでCVSからインポートする際の改行コード設定について このエントリーを含むはてなブックマーク

コードを比較したら全行変更有りと表示されたときで改行コードが問題になったそもそもの原因は、比較する一方のソースコードをEclipseを使ってCVSレポジトリから取得したためでした。

Eclipseの標準設定では、「CVSでファイルを取得する際、OSの改行コードに自動変換」します。これが意図しないタイミングで改行コードをLFからCR+LFに変換していたことが直接の原因でした。

この設定の変更は、「Window>Preference>Team>CVS」の「Files and Folders」タブにある「Convert text files to use platform line ending」で行うことが出来ます。このチェックがデフォルトではONなので、OFFにすることで改行コードの自動変換を行わない設定に出来ます。気がつきにくいので注意。

Eclipseで学ぶはじめてのJava
Eclipse PDTではじめるPHPプログラミング入門
Eclipse 3.4 プラグイン開発 徹底攻略

スポンサーサイト
Eclipse | コメント:0 | トラックバック:0 | 編集

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.tmplhooksディレクトリにあるので、レポジトリのディレクトリに移動して、

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対応

Subversion | コメント:0 | トラックバック:0 | 編集

Subversiveを利用してsvn+sshをしたとき気づいたこと このエントリーを含むはてなブックマーク

SubclipseよりSubversiveのほうが良さそう

結論を言うと、SubversiveのほうがSubclipseより良いと思います。とくに、ポート周りがとてもいい(後述)。

Subversiveとは

Eclipse上でSubversionを利用するプラグインです。同じようなプラグインにSubclipseがあります。今回利用したSubversiveは、

http://download.eclipse.org/technology/subversive/0.7/update-site/

からインストールしたものです。インストールすると、Connectorsのインストールが引き続き行われますが、そのときどれをインストールするか選択を迫られますが、とりあえず全部入れてしまえばOKです。

詳しいインストール法は、ここ→ http://www.eclipse.org/subversive/documentation/gettingStarted/aboutSubversive/install.php

Subversiveメモ

以下、SubversiveでSSH接続をしたときに気がついたこと。および、Subclipseとの違いをメモします。

URLの指定が利用される

URLに

svn+ss://(ユーザ名)@(ホスト名):(ポート名)/(サーバ内フルパス)

のように入力すると、ユーザ名とポート名は、このURLで指定されているものになります。

Subclipseだと、レポジトリごとのポート指定がろくに出来ないので、すばらしいことです。この点だけ比較してもSubversiveに移行する価値があると思います

ポートが指定可能

上記の通り、sshでの接続先ポートを簡単に指定できます。すばらしい。

環境変数SVN_SSHの設定が不要

SSHクライアントを用意して、そのパスをSVN_SSHに指定する必要がありません。Windowsでの利用が中心なので、subclipse利用時にはPuTTYに付属するplink.exeを指定していましたが、その必要はありません。便利。

割と早い

通信にかかる時間がsubclipse+plink(PuTTY)よりもちょっと速い気がする。

プロキシ設定が設定画面で出来る

接続に利用するプロキシの設定がPreferenceのGeneral>Network Connectionsから出来ます。Subclipseの場合は、「server」というテキスト形式の設定ファイルを直接変更する必要がありました(あったはず)。それに比べると、Subversiveは便利かと思います。

全く同じ設定のレポジトリをSVNレポジトリーViewに登録できる

見出しの通りです。Subclipseだと、重複を指摘され、登録できません。登録できる反面、指摘してくれないのはデメリット。

まとめ

もともと最低限の超基本的な機能しか使っていないので、しっかり使っている人の参考にはならないのですが、使ってみた感じでは、全体的に、Subclipseと同じ、もしくは、それ以上の点が多かったような気がします。ただ、ポートをちゃんとレポジトリごとに簡単に設定できる点だけをとっても、私にとってはSubversiveのほうを利用したいと思いますsubclipse+puttyでconfigファイルのtunnelセクションをいろいろ試しても出来なかっただけなので、うまくやれば出来るのかもしれません

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
実用 Subversion 第2版
入門Subversion―Windows/Linux対応

Subversion | コメント:2 | トラックバック:0 | 編集

Subversionの公式サイトが移動されている このエントリーを含むはてなブックマーク

Apache Subversion

ふとダウンロードしようと思ったら、Subversionの公式サイトが移動されていた→「現在のSubverion公式サイト

Subversion | コメント:0 | トラックバック:0 | 編集

subclipseでupdate時に衝突した場合の解決方法 このエントリーを含むはてなブックマーク

一人利用だとsubversionを利用していてもコミット時に衝突することなどなかったのですが、実際に衝突してみて分かったことをメモ

subclipseでの衝突表示

update(更新)実行時に、自分が変更を加えたリビジョン(rev9)より新しいリビジョン(rev10)がすでにコミット済みで、変更位置が重なっていた場合、衝突が発生します。つまり、編集箇所がかぶってしまった場合に発生するわけです。

衝突が発生すると、衝突が発生した箇所に

<<<<<<< .mine
=======
>>>>>>> .r10
という3つの行が現れます。どうやらこれらは、
(衝突に関係ないところ)
<<<<<<< .mine
(updateしようとしたときの作業コピーの内容)
=======
(すでにコミットされていたレポジトリrevision10の内容)
>>>>>>> .r10
(衝突に関係ないところ)
という意味みたいです。つまり、自分の作業コピーの内容に戻すには、「=======」から「>>>>>>> .r10」までを削除すればいいわけです。

修正してコミットしてみる

上記のように、衝突時、ファイルに><が大量に書き込まれてしまうので、手元でファイルを修正してコミットします。しかし、以下のようなエラーが発生してしまいます。

'SVNコミット' has encountered a problem.

org.tigris.subversion.javahl.ClientException:
A conflict in the working copy  obstructs the current operation
svn: Commit failed (details follow):
svn: Abortingj commit:
'D:\...\workspace\作業コピーの場所\ClassName.java'
remains in conflict
衝突を修正したはずなのにどうすればよいのか。

どうすればいいのか

衝突していた場所を適切に修正したのにエラーが表示されたわけですが、ではいったいどうすればいいのか。

エラー本文に「remains in conflict」とありますが、これは内容的な衝突が残っているということではなく、とあるファイルが残っていることを示しています。たとえば、ClassName.javaファイルが衝突していた場合、同じファイル階層に

ClassName.java.mine
ClassName.java.r9
ClassName.java.r10
の3つが作成されているはずです。「.mine」ファイルが自分の作業コピー、「.r9」が自分が変更を加えていたリビジョン、「.r10」がすでにレポジトリにコミットされていた内容を表したファイルです。これらが削除されるまで「remains in conflict」が残ってしまいます。つまり、これら3ファイルを削除すればOKです

具体的な方法

まず、.java.mine、.java.r??ファイルなどを参考にしながら、もともとの作業コピーである.javaファイルを修正します。

続いて、「Package Explorer」上の.javaファイルを右クリックして、「Team>解決済みにマーク」をクリックし、「解決済みにマーク」ダイアログを表示させます。

What do you want to do?
  • Conflicts have been resolved in the file.
  • Resolve the conflict by using my version of the file.
  • Resolve the conflict by using the incoming version of the file.
  • Resolve the conflict by using the base version of the file.
ここで、「Conflicts have been resolved in the file」を選択すれば完了ですcf. $svn help resolved

強制的に上書きしたいときは

このような衝突時に強制的に自分の作業コピーでレポジトリを上書きしたい場合は、「Resolve the conflict by using my version of the file.」を選択すればOKです。

まとめ

衝突したときは、機械的に生成される「.mine」「.r最新の番号」「.r古い番号」という3ファイルをどうにかして削除する必要があり、削除には、「解決済みにマーク」を利用するのがよい。

バージョン管理ってすごく便利だけど、機能がたくさんあって難しい。

Subversion | コメント:0 | トラックバック:0 | 編集
 | HOME |  OLD >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。