S-JIS[2004-03-10/2009-10-21] 変更履歴
Eclipseには、標準でCVSサーバーとやりとりする機能がついている。
(Eclipse2用に書いていたけれど、Eclipse3でもほとんど同じ)
CVSサーバーのモジュール一覧を表示するのが「CVSリポジトリー」というパースペクティブ(ウィンドウ)。
これを開くには、以下のようにする。
項目 | 内容 |
---|---|
ホスト(H) | ホスト名(IPアドレス) |
リポジトリー・パス(R) | ホストのCVSROOTの内容 |
ユーザー(U) | CVSサーバーへ接続する為のユーザー |
パスワード(P) | CVSサーバーへ接続する為のパスワード |
接続型 接続タイプ(C) |
お手軽なのは「pserver」だと思う (CVSサーバー側の設定次第) |
これで、CVSリポジトリー・エクスプローラーにCVSリポジトリーが表示されるはず。
今まで指していたリポジトリーのIPアドレスが変わるだけなら、「サーバーの新規設定+チェックアウトし直し」という手順をとらなくても、全てのCVSディレクトリのRootファイルの中のIPアドレスを書き換えるだけで 新しいリポジトリーを指すようになる。ちょっと(かなり)裏技っぽいけど。[2004-06-09]
通信状態やサーバーの性能が悪いと、CVSの更新中に通信がタイムアウトを起こすことがある。[2008-02-29]
タイムアウトすると、「CVS更新」というタイトルのエラーダイアログが表示される。
本文は「CVSワークスペースの同期中に問題が発生しました。nのうちのmリソースの同期化が終了しました。
」
「詳細(D)」ボタンを押すと「入力ストリームからの読み取り中にタイムアウトになりました。CVS通信のタイムアウト値はチーム/CVS設定で調整できます。
」といった感じのメッセージが表示される。
この場合、CVSのタイムアウト時間を伸ばせば解決する、かもしれない。
タイムアウト時間の設定は以下のようにする。
なお、デフォルトは60秒。
Eclipseで作ったプロジェクトから初めてCVSに登録する方法。cvs importのこと。[2005-06-26]
しばらくして、同期化-発信モードのビューが開く(全ファイルが新規の追加対象)ので、コミットする。
これで、Eclipse上のプロジェクトが「共用」される。
→共用の解除方法
(CVSサーバーがCVSNTの場合?)[2007-09-06]
大量(1000ファイルを余裕でオーバー)のファイルをインポートしようとすると、途中で正常に終了したように見えて、実は半端に終わっている状態になる。再度コミットしようとすると競合が発生したり、競合ではないのにコミットに失敗したりして解消方法不明(嘆)
最初は少ないファイル数でインポートし、後から追加してコミットするのが吉。
cvs checkoutのこと。
これで、新しい“Javaプロジェクト”としてチェックアウトされる。(「共用」される)
→共用の解除方法
→(Javaプロジェクトでない)単なるプロジェクトとしてチェックアウトしてしまった場合にJavaプロジェクトに変更する方法
共用(インポートあるいはチェックアウト)したプロジェクトの、共用の解除方法。[2008-12-27]
CVSメタ情報というのは、各ディレクトリーの下に置かれているCVSというディレクトリー(とその下にある各ファイル)。
CVSリポジトリーの場所や管理対象ファイルのバージョンや更新日時といった情報を保持している。
(.cvsignoreファイルはCVSメタ情報には含まれない)
CVSメタ情報を残して切断した場合、再度共用するのが簡単に出来る。
CVSメタ情報を削除して切断した場合でも、インポートと同様の手順でCVSリポジトリー内の既存モジュールを指定しさえすれば、再度共用できる。
CVSでは、個別にファイルを指定しない大抵の操作(updateやdiff・commit等)は再帰的にサブディレクトリーに対して処理される。[2008-04-09]
EclipseのCVSでも同期化・更新・コミット・比較・置換といった操作は、基本的に再帰的に処理される。
が、パッケージ・エクスプローラーでJavaソース内の途中のディレクトリー(パッケージ)を指定した場合は再帰的には処理されず、そのディレクトリー(パッケージ)直下のファイルだけが操作対象になる。
(つまりサブディレクトリー内に変更されたファイルがあっても(ローカルの変更でもリモートの変更でも)、「変更なし」扱いされてしまう。あたかも-lオプションが指定されたかの如し)
cvs updateのこと。[2004-03-16]
これで、CVSサーバー(リポジトリー)からディレクトリ(やファイル)が更新される。(※ディレクトリーの場合は再帰的には処理されない)
更新前にリポジトリーとの差異が知りたい場合は、リポジトリーと同期化を使う。そちらから更新を行うことも可能。
Eclipse2で「サーバーが追加情報を提供しませんでした」という内容の「更新の実行中に問題が発生しました」ダイアログが出た場合、コンフリクトが発生している可能性が高い。[2004-06-09]
他人が同じソースの同じ箇所を修正した場合、CVSの華(!?)であるコンフリクト(衝突)が発生して、そのままではコミットはおろか更新も出来なくなる。[2004-06-09]
Eclipse3では、更新の実行中には「CVS更新」というダイアログが出て、進行状況がプログレスバーで表示される。[2007-07-14]
コンフリクトが発生すると、「競合する一部の変更は自動的にマージできません。これらの変更は、手動でマージする必要があります。」という「マージの失敗」ダイアログが表示される。
このとき、元の「CVS更新」ダイアログに処理中のファイル名が表示されている為、どのファイルでコンフリクトが起きたかすぐ分かる。
また、その後に同期化ビューを開くことが出来るので、そこでもコンフリクトを確認できる。
cvs commitのこと。[2004-03-16/2004-06-09]
これで、CVSサーバー(リポジトリー)にディレクトリ(やファイル)がコミットされる。(※ディレクトリーの場合は再帰的には処理されない)
コミット前にリポジトリーとの差異が知りたい場合は、リポジトリーと同期化を使う。そちらからコミットを行うことも可能。
なお、対象の中にリポジトリーに存在しないファイルがあった場合、追加するかどうか聞かれるので、事前に追加をしておく必要は無い…。本来のCVSでは、cvs addが必要。
Eclilpse3.4では、コミット時の「コミット・ファイル」ダイアログ(コミットコメントを入れるダイアログ)の下側に出ている変更ファイル一覧をダブルクリックすることで、リポジトリーとの差分が表示されるようになった。[2009-10-21]
(Subversiveでは差分用のダイアログが別途開くのだが、CVSではコミットダイアログに出るので、画面が狭いとつらいかも(苦笑))
cvs addのこと。[2004-03-26/2004-09-08]
この後コミットすることにより、CVSサーバー(リポジトリー)にディレクトリ(やファイル)が追加される。
なお、追加せずにコミットしようとすると
追加するかどうか聞かれるので、(eclipseの場合は)事前に追加処理をしておく必要は無い…。本来のCVSでは、cvs addが必要。
ただし追加したファイルのkオプションをコミット前に変更しておきたい場合は、この追加処理は必要。
各ディレクトリに置かれる.cvsignoreのこと。[2005-06-26]
名前別リソース | 最初に選択したファイルだけを対象とする。 |
ワイルドカードの拡張子 | 最初に選択したファイルと同じ拡張子のファイルを対象とする(例:hoge.txt → 「*.txt」が対象) |
カスタム・パターン | 自分でワイルドカードを指定 |
.cvsignoreファイルは各ディレクトリ毎に作られるので、ワイルドカードを指定したとしても、有効なのはそのディレクトリ内のみ。
既にCVSにコミットしてしまったファイルについては、いったん削除してコミットし、ファイルを作り直してから.cvsignoreに追加する。
Eclipse全体で無視したいファイルがある場合には、以下の設定で指定可能。
cvs removeに該当。[2004-06-09]
ただし、このやり方だと ディレクトリ内にある削除以外の変更もコミットされてしまう。
リポジトリーと同期化を使えば、削除したファイルだけをコミットすることが可能。
cvs tagに相当。[2007-07-14]
付けたタグは、Eclipse3.2ではヒストリーの表示で確認できる。
cvs logに該当するのかな? [2004-03-26]
これで、今までの変更履歴(コミット日時・コミット者・コミットした時のメッセージ)が表示される。
Eclipse3では、付けられているタグも表示される。 [2007-07-14]
(Eclipse2)今までの変更のどれかの時点の内容と比較したいときは、次のようにする。 [2004-09-08]
Eclipseの場合、(たぶん)ファイルを保存する度に ローカルな履歴が保持される。 [2004-06-09]
「ローカル・ヒストリー」を選ぶと、それが見られる。比較でなく、その内容に戻したい場合は置換を使う。
cvs diffに該当。 [2004-03-26/2007-07-14]
→最新以外(CVSのヒストリー)と比較したい場合:履歴表示を参照
→CVSとは無関係に2つのファイルを比較する方法
これで、Eclipse上のファイルとCVSサーバー(リポジトリー)上のファイルが比較され、内容が違うものが「同期化」パースペクティブに表示される。(※ディレクトリーの場合は再帰的には処理されない)
表示対象 | モード名 | 概要 | ||
---|---|---|---|---|
全て | Eclipse3 | 追加/削除モード | 差異があるもの全て。 | |
サーバー新規 | Eclipse2 | 同期化 - 着信モード![]() |
リポジトリーと差異がある場合、リポジトリーの方が新しいもの(更新したらローカルが変わるもの) 。 | |
Eclipse3 | 追加モード | |||
ローカル新規 | Eclipse2 | 同期化 - 発信モード![]() |
リポジトリーと差異がある場合、ローカルの方が新しいもの(コミットしたらリポジトリーが変わるもの) 。 | |
Eclipse3 | 削除モード | |||
コンフリクト | Eclipse2 | 競合のみ表示![]() |
リポジトリーと競合(コンフリクト)を起こすもののみ。 | Eclipse2ではトグルボタンなので、このボタンをもう一度押すと元の状態に戻る。 着信モードでも発信モードでも使用可能。 |
Eclipse3 | 競合モード |
同期化パースペクティブに表示されているファイルをダブルクリックすると、ローカルの内容とリポジトリーの内容を並べて表示する「テキストの比較」エディターが開く。[2008-04-09]
(Eclipse2)「同期化」パースペクティブの上部ペインの「構造体の比較」に出ているファイルをダブルクリック(又は右クリック→「内容比較の表示(S)」)すると、内容の違いが下部ペインに表示される。
ローカルでファイルを削除した場合や リポジトリーに新しくファイルが追加されていた場合は、左側の欄には「ワークスペース・ファイルはありません。」と表示される。
内容が異なるファイルをリポジトリーのものにしたい場合、置換を使うと便利。
さらには、差異が表示されているウィンドウ内を直接編集して修正することも可能。
同期化ビューを開かずに比較するには、(置換と同様の手順で)比較メニューを使う。[2008-04-09]
※ディレクトリーを指定した場合の動作は同期化と同じになる。
同期化パースペクティブの「発信モード」で表示されているものを選択してコミットすることも出来る。(例えば、削除したファイルだけをコミットするとか)
同期化パースペクティブの「着信モード」で表示されているものを選択して更新することもできる。
Eclipse2の場合、ローカルな変更の履歴を持っているので、それを差分表示することも可能。 [2004-06-09]
差分をパッチ(テキストファイル)の形で保持し、別ファイルに適用することで同じ変更を施すことが出来る。 [2009-10-21]
ただし、CVSへのコミット前の状態で、リポジトリーとの差分を取ることしか出来ない。
つまり、一度コミットしてしまうとパッチを作成することが出来ないし、いくつか前の(直前でない)バージョンからの差分を取ることも出来ない。
(SVN(Subversive)では可能)
作成したパッチは、別ファイルに適用することが出来る。
ただし、ファイル名が異なると駄目なようだ。
(変更内容が同じなら出来ても良さそうな気がしないでもない…。まぁ、パッチファイルの中身を書き換えれば出来るような気もする)
cvs annotateに相当。[2008-03-31]
ソースの行ごとに、その行がどのバージョンによって書かれたか(最後に更新されたか)を見るために使用する。
以下の手順で注釈を表示できる。(この方法は、ローカルにあるバージョンのソースに対して有効)
もしくは、履歴から実行することも出来る。(この方法は、任意のバージョンのソースに対して有効)
Eclipse上でのCVS注釈には、表示のされ方が少々異なるモードが用意されている。
モード(名前は適当) | 開かれるビュー | 説明 | ||
---|---|---|---|---|
クイックDiff | ソース(色つき) | ヒストリー | (CVS注釈ビュー) | ソースの左側に、バージョン毎に色が付いて表示される。 何も色が付いていないのは、ローカルで変更してコミットされていない部分。 |
注釈パースペクティブ | ソース | ヒストリー | CVS注釈パースペクティブ | 「CVS注釈」がパースペクティブの場所に開く。 |
注釈ビュー | ソース | ヒストリー | CVS注釈ビュー | 「CVS注釈」がビューの場所に開く。 (ヒストリーと同じ場所なので、自分で選択しないと見られない) |
CVS注釈(ビューorパースペクティブ)には、ソース行毎の、バージョンと更新者(コミットした人のユーザーID)が表示される。
いずれのモードでも、ソース上の行にカーソルを合わせると、その行(のバージョン)に該当するヒストリー上の行が自動的に選択される。
また、該当ソースに対応するCVS注釈(ビューorパースペクティブ)があれば、その該当行も自動的に選択される。
逆にCVS注釈上で行をクリックすると、ソース上の該当箇所が選択状態になる。
ローカルの修正を破棄して リポジトリーの内容に変更する方法。[2004-05-16]
cvs update -Cに該当。
(Eclipse2)同期化パースペクティブで表示されているファイルを戻したい場合、「構造体の比較」の戻したいファイルを右クリックして「ナビゲーターで表示(N)」をすると、ナビゲーターパースペクティブで該当ファイルが選択されるので そこから上記の方法をとるのが便利。
また、Eclipseがローカルに保持している変更履歴から戻すことも出来る。 [2004-06-09]
中のファイルを全て削除してからコミットすると、自動的にディレクトリごと消える。[2004-05-16]
ただし、設定(メニューバーの「ウィンドウ(W)」→「設定(P)」)の「チーム」-「CVS」で
右ペインの(Eclipse3では「ファイルおよびフォルダー(F)」タブの)「空ディレクトリーの整理(P)」にチェックが付いている必要がある。cvs
update -Pに該当。
チェックが付いていないと、「更新」するとディレクトリが復帰する。
CVSのkオプションを指定することにより、ファイルをテキストとして扱うかバイナリーとして扱うかを決めることが出来る。[2004-06-29]
ちょっと特殊な拡張子のファイルだと、テキストであるにもかかわらず(デフォルトで)バイナリーとして扱われてしまうことがある。バイナリーの場合、更新時にマージされず、リポジトリー側の内容で上書きされてしまう。
→Eclipse2の変更方法
↓Eclipse3の変更方法
デフォルトのkオプションはファイルの拡張子毎に決まっており、以下の手順で追加変更できる。[2005-06-26]
ファイル毎にkオプションを変更するには、以下のようにする。[/2007-07-14]
これにより、kオプションがコミットされてリポジトリーに記録される。
更新を行うと、リポジトリーのkオプションも反映される。
既存ファイルでなく、新規のファイルのkオプションを指定しておきたいときは、コミット前にkオプションを変更しておく。[/2007-07-14]
現在のkオプションを確認するには、以下のようにする。
すると、ダイアログの右ペインにCVS関連の情報が表示される。
項目 | 値の例 | 説明 |
---|---|---|
変更 | はい | ローカルに変更がある(コミット前) |
いいえ | ローカルに変更がない | |
キーワード・モード | バイナリー(-kb) | バイナリー |
キーワード拡張のあるASCII(-kkv) | テキスト($DATE$といったCVSキーワードを展開する) | |
タグ | ヘッド | タグやブランチの状態 |
(Eclipse2)CVSに大文字・小文字だけが異なるディレクトリ名が登録されている場合、Windowsでのeclipseで更新すると 「フォルダーの作成中に問題が発生しました」というエラーになる。 (「異なるケースを持つリソースが存在します」というメッセージが表示されるが、「ケース」というのは大文字・小文字のことと思われる。大文字変換にUpperCaseという名称が使われることもあるし)
また、ディレクトリ名をすべて小文字にしてアンダーバーが入ったディレクトリが(ローカル:Windows側に)自動的に作られる。
testDir → t_e_s_t_d_i_r_
この状況を直すには、
不要な方のディレクトリを削除してコミットする。
(ディレクトリ名をリネームするにはeclipseのリファクタリングでは駄目で、Windowsのエクスプローラーなりで直接リネームする)
その後更新しなおせば、必要な方だけ取り出せる。