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

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

ブログ内検索

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

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

コードを比較したら全行変更有りと表示されたとき このエントリーを含むはてなブックマーク

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

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

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 | コメント: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 | 編集

svnコマンドをSubclipseで実行しチェックアウトする このエントリーを含むはてなブックマーク

オープンソースソフトウェアは、ソースコードのダウンロード方法として、コマンドラインだけ提示されていることがあります。今回は、そういう場合にコマンドラインを使わず、Subclipseを利用してソースコードをダウンロードしてみます。

SubclipseをSubclipseでチェックアウトしよう

EclipseプラグインSubclipseのソースコードを、まさにそれ自体であるSubclipseでチェックアウトしてみます。

コマンドラインによるチェックアウト方法は書いてある

Subclipseの公式ページには、ソースコードをチェックアウトする方法として、

svn checkout http://subclipse.tigris.org/svn/subclipse/trunk subclipse --username guest
というコマンドが提示されています。これは、コマンドラインを利用する場合の方法です。このコマンドによって、guestユーザの権限で、subclipseというディレクトリにtrunkフォルダ内のソースコードがチェックアウトされます。

ただ、Subclipseに直接このようなコマンドを入力することはできません。また、Subclipseに限らず、このようにコマンドラインでのチェックアウト方法だけが書いてあることは多々あります

Subclipseでチェックアウトする

まず、パッケージエクスプローラ(Package Explorer)上の何もないところで右クリックをして、「Import...(インポート)」を選択しますEclipseを日本語化していないので、日本語表記は怪しいです。日本語化している人の方が少数派ですよね。。。

続いて、表示された選択肢の中から、「SVN>SVNからプロジェクトをチェックアウト」を選択し、「Next>」をクリックします。

ロケーションの選択/生成画面が表示されたら、「新規レポジトリー・ロケーションを生成」を選択して「Next>」をクリックします。

次は、ロケーションを求められます。ここでは、ロケーションとして、

svn://guest@subclipse.tigris.org/svn/subclipse/trunk
なんかに勝手にしないことです。なんとなく、「subversionだから、svn://とかあったよな」という考えでこのようにしてはいけません。なぜなら、svn://は、svnサーバが提供されている場合しか使えず、あくまでhttp://でアクセスしろと言うことなので、余計なことはしてはいけないからです。じゃぁ、どうすればいいかというと、ここは普通に
http://subclipse.tigris.org/svn/subclipse/trunk
と入力してください。入力後、「Next>」をクリックします。

続いて、「ユーザ名とパスワードの入力」画面が表示されるので、

ユーザ名:guest
パスワード:<何も入力しない!>
とします。パスワードを保存しても何も困らないので、「パスワードを保存する」にチェックを入れておくといいかもしれません。入力後、「OK」です。

すると、以下のようにチェックアウトするフォルダの候補がずらっと表示されます。

subclipse
subclipse_mylyn
subclipse_mylyn3
svnClientAdapter
svnant
www
ここで、チェックアウトしたいプロジェクトのフォルダを選択して「Next>」です。普通は「subclipse」ですね。

すると、「チェックアウトの方法とリビジョンの選択」画面が表示されます。

フォルダ subclipse をチェックアウトする方法を選択してください
  • 新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト
  • プロジェクトとしてワークスペースへチェックアウト
では、「プロジェクトとしてワークスペースへチェックアウト」が選べる場合は選んでしまった方が楽です。 また、
Check out HEAD revision
にチェックを入れることで、最新版がチェックアウトされます。通常、チェックを入れたままにしましょう。

残りのオプションですが、「Depth」は、「Fully recursive」を選択してください。Fully recursive以外だと、すべてのファイルがチェックアウトされません。また、「Ignore externals」にチェックを入れると、外部参照を無視してしまいます。普通はチェックを入れてください。「Allow unversioned obstructions」にチェックを入れないと、ローカルフォルダにたまたまあったバージョン管理されていないファイルと衝突した場合、チェックアウトがキャンセルされます。これはそのままでいいと思います。 以上の入力が完了したら「Next>」。

最後に「プロジェクトのロケーション選択」画面が表示されるので、必要に応じてワークスペースを選択してください。選択したら、いよいよ「Finish」です。

Javaプロジェクトとしてチェックアウトしたい

Javaプロジェクトとしてチェックアウトしたい場合など、プロジェクトのタイプを指定したい場合は、

フォルダ subclipse をチェックアウトする方法を選択してください
  • 新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト
  • プロジェクトとしてワークスペースへチェックアウト
で「新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト」を選択してください。直後の画面で、「Java>Java Project」を選択してください。ほかにもいろいろありますが、適切なものを選択してくださいここでまた「SVN>SVNからプロジェクトをチェックアウト」にしてしまうと、無限ループが始まってしまうので注意

ちなみに、Subclipseをチェックアウトするなら「Plug-in Project」でいいんでしょうかね。

おわり

以上でチェックアウト終了です。

追記:Subclipseをチェックアウトするとき

チェックアウトをプロジェクトごとに行うなら、「/trunk/subclipse」ではなく一つ深い階層のたとえば「/trunk/subclipse/org.tigris.subversion.subclipse.core」を選択して「プロジェクトとしてワークスペースへチェックアウト」をチェックしてチェックアウトしてください。すると、.projectファイルがあるので、正しくチェックアウトできます。

Subversion実践入門
実用SSH
Eclipse 実践開発入門

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

svn+ssh://の後に続くパスについて このエントリーを含むはてなブックマーク

svn+sshをやると言ってから、ずっとsshを使わずにローカルでsubversionを利用していたので進展なしでした。ついにEclipseからSubclipse経由でsvn+sshを利用できるようになったので、記念にメモ。svn+sshの導入方法自体についてはまた今度書こうかと思いますこれで割と安全に、たとえば外出先から家のsubversionサーバに接続できるようになるわけです

svn+ssh://???

svn+ssh://の後には、sshログインユーザ名@ホスト名(IPアドレス)/レポジトリパスと続きます。たとえば、

svn+ssh://username@192.168.1.1/svn/repos
となります。ここで、メモしておきたいポイントは、「ホスト名の後に続くパスは、SSHで接続するサーバのフルパス」ということです。

つまり、ルートディレクトリからちゃんと書けということみたいです。上の例では、ルートディレクトリ(/)にsvnディレクトリがあり、svnディレクトリの中にreposレポジトリがあることになります。

svn+ssh結構手間取った;

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