バージョン管理下にあるEclipseファイルはどれですか?


242

ソースを除いて、どのEclipseファイルがソース管理下に置くのが適切ですか?

私のプロジェクトでは、具体的には、次のことについて疑問に思っています。

.metadata / *
project-dir / .project
project-dir / .classpath
project-dir / .settings / *

依存しているものがある場合は、ガイドラインを説明してください。

回答:


175

メタデータはソース管理で管理されるべきではありません。それらには主にワークスペースに関連するデータが含まれています。

唯一の例外は、.launchXMLファイル(ランチャー定義)です。

彼らはにあります

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

そして、それらをプロジェクトディレクトリにコピーする必要があります。プロジェクトが更新されると、それらの構成が[実行構成]ダイアログに表示されます。

そうすれば、これらの起動パラメーターファイルをSCMで管理することもできます。

(警告:DOは、「関連するリソースが削除されると削除の設定」オプションをオフ実行 / 起動 / 起動の設定は再びそれをインポートするために、ソフト削除のプロジェクトに共通している-の再初期化を強制するために:環境設定パネルEclipseメタデータ。ただし、このオプションをオンにすると、詳細な起動パラメーターが削除されます!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

(特にあなたのSCMであるべき.project.classpathに応じて、Eclipseのドキュメント)。

目標は、誰でも自分のSCMワークスペースをチェックアウト/更新し、EclipseプロジェクトをEclipseワークスペースにインポートできることです。

そのためには、リンクされたリソースを使用して、.classpathで相対パスのみを使用する必要があります。

注:project-dirEclipseワークスペースの下に作成されたディレクトリではなく、「外部」プロジェクトディレクトリを参照する方が適切です。これにより、2つの概念(EclipseワークスペースとSCMワークスペース)が明確に分離されます。


以下のようipsquiggleはコメントに言及し、私はに言及したように、古い答えにように、あなたが実際に起動設定を保存することができ、ファイルを共有プロジェクトディレクトリに直接。すべての起動構成は、他のプロジェクトファイルと同様にバージョン管理できます。

(ブログ投稿のヒント: KDからの起動構成の作成と共有から)

代替テキスト


16
(IMO).launchファイルの.metadataで何かを操作するためのはるかに優れたワークフローは、起動設定を編集するときに、commonタブでを選択しますSave as > shared file。これにより、プロジェクトフォルダーに直接ドロップされるので、プロジェクトの残りの部分とSCMできます。
Ipsquiggle

3
.projectをSCMに含める必要があるのはなぜですか?たとえば、有効にすると.projectが変更されるコードメトリックツールを使用したいとします。それをプロジェクトのすべてのユーザーに強制したくありません。
jfritz42

8
@ jfritz42:ローカルで時間どおりの変更を自分だけに有効にする場合は、.projectとりあえず自分のワークスペースのためにバージョン管理を無視します。ただし、他のすべてのユーザーがEclipseワークスペースにすばやくインポートできる共通のEclipseプロジェクト定義を奪わないでください。必要な瞬間だけに合う定義が1つだけあるからです。
VonC、2011年

7
ありがとうございました。私はそれらのリンクを注意深く調べますが、あなたのリンクの最初で、1つの回答が「間違いなくはい」で始まり、次の回答が「間違いなく」で始まることにすでに気づきました。Googleには、初心者に不快なさまざまなアドバイスが満載です。目標は理解していますが、そこにたどり着く方法が問題です。私はXcodeの出身で、ソースとユーザーのオプションがXcodeで生成された出力とコンパイラーで生成された出力から明確に分離されているため、この質問には簡単な答えがあります。Eclipseの初心者には、これらのファイルが混在し、散在しているように見えます。私は単純な理解可能な回答を探しています
garyp

3
私はVisualStudioの土地から来たので、ここで2番目に@garypを実行します-これは本当にホットな混乱です-Eclipseがユーザーごとのファイルを一時的に、または追跡する必要がない場合は、別の場所に配置する必要があります。プロジェクトとビルドの定義を追跡でき、すべての一時的なゴミが邪魔になりません。Eclipseチームからの公式のガイダンスはどこにもないのですか?(Eclipseチームが単体テストを行っていないことは明らかです(ただし、単体テストを行っても効果的ではありません)。少なくとも、ソース管理を使用していることを教えてください!XD)
BrainSlugs83

19

現在、.projectファイルと.cprojectファイルがソース管理されているプロジェクトに取り組んでいます。ライブラリパスとリンクディレクティブに関連する設定がチーム全体に伝播するという考えでした。

実際にはうまく機能していません。ほとんどの場合、マージは競合した状態に戻り、Eclipseの外で競合を解消する必要があります。その後、変更を有効にするためにプロジェクトを閉じて再度開きます。

それらをソース管理に保持することはお勧めしません。


14

CDT構成ファイルがソース管理に適していないことは何の価値もありません。.cprojectファイルが頻繁に変更され、競合を引き起こすバグが報告されていますリポジトリでcdt-projectファイル共有すると、常に競合が発生するをご覧ください。


Yikes-このバグは6年前のもので、まだ触れられていません。明らかに、ソース管理サポートはEclipseチームの優先事項ではありません!
BrainSlugs83 2014年

2
また、.cprojectファイルには、他の開発者に手動での再作成を強制するのではなく、構成情報が含まれていることにも注意してください。ああ。
Christopher Barber

7

Mavenを使用するプロジェクトなど、一部のプロジェクトはPOMに基づいて.projectファイルを生成します。

そうは言っても、それ以外は-.metadataをソース管理に含めるべきではありません。プロジェクトは、標準の管理方法などに基づいて、projectdir / .settingsが行うかどうかを決定する必要があります。開発者が標準に基づいて環境をセットアップすることを正直に信頼でき、プロジェクトごとに特別なものをカスタマイズする必要がない場合は、それらをカスタマイズする必要はありません。私、すべてのプロジェクトを具体的に構成することをお勧めします。これにより、開発者はデフォルトの設定を何度も変更することなく、同じワークスペース内の複数のプロジェクトのものに取り組むことができ、設定を非常に明示的にして、デフォルト設定がプロジェクトの標準に一致するように上書きします。

唯一の難しい部分は、それらがすべて同期していることを確認することです。ただし、ほとんどの場合、プロジェクト間で.settingsファイルをコピーできます。ソース管理で特に必要のないものがある場合は、SCMがサポートしている場合は、それらに対してsvn:ignoreを設定するのと同じことを行います。


2
Maven 1と2を使用しており、要求された場合にのみ.projectファイルを生成します。そうした場合でも、それはPOMの内容に基づいて行われます。そのため、別の開発者がすでにその手順を実行し、結果をバージョン管理にチェックインしている場合は、それを利用してみませんか?
Andrew Swan

6

.classpathファイルは間違いなくscmにチェックインするのに適した候補です。手動で設定するのは大変な作業であり、新しい開発者がプロ​​ジェクトに参加するのは難しいためです。他のソースから生成できるのは事実です。その場合、他のソースをチェックインします。

.settingsは設定により異なります。これは灰色の領域ですが、一部の設定はほぼ必須であり、プロジェクトをチェックアウトしてEclipseにインポートし、すべてを設定して問題なく実行できると便利です。

したがって、このプロジェクトでは、CVS.settingsと呼ばれる.settingsフォルダーのコピーを保持しており、それを.settingsにコピーするantタスクがあります。CVSからプロジェクトを取得したら、「eclipsify」antタスクを呼び出して、デフォルト設定を新しい.settingsフォルダーにコピーします。プロジェクトで開発するすべての人が必要とする設定を構成する場合、それらをCVS.settingsフォルダーにマージして戻し、それをCVSにコミットします。この方法でSCMに設定を保存すると、意識的なプロセスになります。開発者は、大きな変更がチェックインされるときに、それらの設定を.settingsフォルダーにマージする必要があります。しかし、驚くほどうまく機能するシンプルなシステムです。


4

私はそれらのどれも言いません。それらには、ワークステーションにのみ関連する情報が含まれている可能性があります(私はライブラリなどすべてのパスについて考えています)。また、チームの誰かがEclipseを使用していない場合はどうなりますか?


3
いいえ、.classpathに相対パスを含めることができます。stackoverflow.com/questions/300328#300346を参照してください。
VonC 2008

7
彼らが同じ開発者を使用していない場合、かなり一貫性のない/非効率的なチームのように聞こえます。ツール、プロジェクト、デバッグ、ビルドの定義など-次に、一般的なコーディング標準またはJDKを使用しないように指示します。-理想的には、ユーザーは多くの追加のセットアップや指示なしで、プロジェクトをソース管理からプルダウンしてすぐにジャンプできる必要があります。したがって、この答えは私には受け入れがたいだけです。
BrainSlugs83 2014年

1
誰かが新しいワークスペースからプロジェクトを開いたからといって、マージ中に設定ファイルの競合に対処する方が効率的ではありません。これは大きなプロジェクトでは悪夢です。さらに、まったく同じ構成で同じIDEを使用するように強制することは、不要な制限のように聞こえます。
A.ロダス

[〜agnul]に同意します。プロジェクトはビルドツール(gradle、maven、antなど)を使用している必要があり、IDEはビルドツール構成ファイル(build.gradle、pom.xml、build.xml、 etc ...)バージョン管理されるべきIDEファイルはありません。これらはすべてプロジェクト固有のファイルではなく、開発者固有のファイルです。単純なものはバージョン管理に属しません。
axiopisty 2016

2

考慮してください:

.classpath
.project
.launch

プロジェクト相対パスを使用する限り、これらはバージョン管理されている必要があります。これにより、他の開発者がプロ​​ジェクトをチェックアウトしてすぐに作業を開始できます。他の開発者が経験したセットアップの苦労をすべて経験する必要はありません。

Eclipseの開発者がワークスペース全体をチェックアウトしてすべての適切なプロジェクトで事前構成できるように、バージョン管理に.metadataも含めるように誘惑されるかもしれませんが、誰もがいつでも作業できるように、多くのユーザー固有の情報が含まれています変更なので、.metadataを含めないことをお勧めします。既存のすべてのEclipseプロジェクトをインポートするだけで、ローカルワークスペースを簡単に構築できます。


私の経験では、これをEclipseを新しいバージョンに更新したり、フレーバーを切り替えたりすると、さまざまな方法で壊れる傾向があります。
–ThorbjørnRavn Andersen 2015

1

新しい同僚(そして私)のためにEclipseワークスペースの設定に何時間も費やしました。最終的に私がやったことは、自分の.metadataを新しい開発者のマシンにコピーすることでした。

チームで作業している場合は、バージョン管理を維持するのに非常に適している候補は次のとおりです。

  • インストールされているJREとその名前
  • サーバーランタイム環境
  • Javaエディターテンプレート
  • バージョン管理のキーボードショートカット
  • プロジェクト固有の設定を提供しないプラグイン設定
  • Mavenの設定
  • 事前構成されたパースペクティブ
  • ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.