Gitソース管理下で絶えず変化するIntelliJ IDEAプロジェクトファイルを処理する方法


151

私たちのチームの全員がIntelliJ IDEAを使用しており、ビルド構成、設定、および検査を共有できるように、プロジェクトファイル(.iprおよび.iml)をソース管理に入れると便利です。さらに、TeamCityとの継続的インテグレーションサーバーでこれらの検査設定を使用できます。(ユーザーごとのワークスペース.iwsファイルは.gitignoreファイルにあり、ソース管理にはありません。)

ただし、IDEAでほぼ何を実行しても、これらのファイルはほとんど変化しません。IDEAの問題データベース(IDEA-64312)に問題があるため、おそらくこれはIDEAのバグと考えるかもしれませんが、これは当面の問題に対処する必要があります。

最近まで、Subversionを使用していましたが、最近Gitに切り替えました。無視したプロジェクトファイルの変更リストを作成することに慣れ、他のユーザーと共有したいプロジェクトファイルの変更がない限り、チェックインしませんでした。しかし、Gitの場合、本当の力は(私たちが調査しているものから)それが奨励する継続的な分岐であるように思われ、分岐間の切り替えは、プロジェクトファイルが常に変更されているので苦痛です。多くの場合、何とかして変更をマージでき、新しいブランチに適用されているプロジェクトファイルの変更を処理しようとします。ただし、新しいブランチがプロジェクトファイルを変更した場合(ブランチがまだ他のブランチにない新しいモジュールで作業しているなど)、gitはエラーをスローします 両方のブランチに変更があり、ローカルに変更がある場合は、ファイルにマージすることに意味があり、むしろそのポイントを理解できます。コマンドラインから、「git checkout」コマンドで「-f」を使用して、ローカルの変更を強制的に破棄し、代わりにブランチのブランチを使用することができますが、(1)IDEAのGit Checkout GUIコマンド(10.5.1)私たちが見つけることができるオプションとしてそれを持っているようには見えないので、定期的にコマンドラインに切り替える必要があります、そして(2)それを使用する習慣になりたいかどうか確信がありませんフラグを付け、Gitにローカルの変更を破棄するように指示します。

それで、これを処理しなければならないオプションについての考えをいくつか示します。

  1. プロジェクトファイルを完全にソース管理から除外します。それらを.gitignoreに入れ、他の方法で、または別の場所でソース管理に置くなどして、各人とTeamCityに配布します。私たちのチームは十分に小さいため、このオプションは十分に検討できますが、すばらしいとは言えません。
  2. 特定の時点でどのブランチにあるどのファイルを確実に管理するかを試みて、それと共存し続けます。この一環として、各開発者がシステム上に各プロジェクトの複数のコピーを持つことをお勧めします。そうすることで、各プロジェクトファイルの異なるセットに異なるブランチにチェックアウトできます。
  3. プロジェクト(.ipr)だけをソース管理に配置し、モジュール(.iml)ファイルをソース管理および.gitignoreファイルに配置しないでください。定期的に.ipr内で自動的に切り替わるように見える主なものは、共有ビルド構成の順序ですが、それらの設定方法に関する情報を個別に共有することもできます。IDEAが、特に新しいチェックアウト時に、ファイルの一部のみを持っているというこの種のことをどのように処理するかはよくわかりません。

おそらくGitとIDEAの両方が持つと思われる巨大なカスタマイズ性に対処するために、私たちが見逃している明らかな(または非自明な)解決策があることを願っています。しかし、この問題を抱えているのは私たちだけではあり得ないようです。スタックオーバーフロー上の種類の類似した質問には、34951911000512、および3873872、彼らはまったく同じ問題だと私は知らない、と多分誰かが私がきた様々なアプローチのための長所と短所を思い付くことができます概説、それらの質問への回答にリストされているアプローチ、または彼らが推奨するアプローチ。



以下の回答は、良いベースとしてgitignore.ioを提供しています。事実の3年後でも、私はそれが便利だと感じました:gitignore.io/api/java,android,eclipse,intellij
WernerCD

IDEAの問題に注意してください 私が言及 youtrack.jetbrains.com/issue/IDEA-64312はIntelliJ IDEA 14で修正済みとしてマークされているため、最新バージョンを使用していて、ファイルをソース管理に保持したい場合は、今のほうが良いかもしれませんこの質問を投稿したときよりも。

回答:


48

IDEAを使用できます ディレクトリベースのプロジェクト構造をます。設定は、.iprファイルではなく.ideaディレクトリに保存されます。これにより、バージョン管理に格納される内容をより細かく制御できます。.imlファイルはまだ存在しているので、それらのランダムな変更は解決されません(ソース管理から除外される可能性がありますか?)。ただし、コードスタイルや検査プロファイルなどを共有するのは簡単です。 .ideaディレクトリの下の独自のファイル内。


ディレクトリベースの構造に移行することは間違いなく大きな助けとなりました。.imlファイルをソース管理から除外したため、IDEAを初めてチェックアウトするときに少し混乱しましたが、現時点では最善の妥協案です。また、TeamCityインスペクションをMavenファイルとエクスポートされたインスペクションプロファイルから機能させる必要がありましたが、それも機能しました。ありがとうございました!

リンクが壊れています。オリジナルコンテンツがあったが、わからないものをここに IDEAのプロジェクト構造上の関連するドキュメントへのリンクです。そして、ここでは、この特定の問題に対処する別のリンクです。
Ben.12

31

公式DOCから:http : //devnet.jetbrains.com/docs/DOC-1186

IntelliJ IDEAプロジェクト形式(.iprファイルベースまたは.ideaディレクトリベース)に応じて、次のIntelliJ IDEAプロジェクトファイルをバージョン管理下に置く必要があります。

.iprファイルベースの形式

プロジェクトの.iprファイルとすべての.imlモジュールファイルを共有します。ユーザー固有の設定を保存するため、.iwsファイルは共有しないでください。

.ideaディレクトリベースの形式

ユーザー固有の設定を保存するworkspace.xmlおよびtasks.xmlファイルを除く、プロジェクトルートの.ideaディレクトリの下にあるすべてのファイルを共有し、すべての.imlモジュールファイルも共有します。

私はそれを私の.gitignoreに入れます:

#Project
workspace.xml
tasks.xml

8
はい、そして質問で述べたように、.iwsではなく.iprと.imlを共有しました。問題はyoutrack.jetbrains.com/issue/IDEA-64312の問題で、.imlファイルが常に変更され、頻繁に競合が発生することです。IDEAがMaven POMから.imlファイルを再生成し、他の開発者と競合することなくローカルで変更を続けることができるため、.imlファイルをソース管理外に保つことは、私たちにとってはうまくいくようです。ありがとう!

このアプローチでは、Android JDKバージョンなど、一部のリソース名に問題があります。私たちのチームのメンバーの一部は、構成されたSDKに対して異なる名前または異なるバージョンを持っています。プロジェクトファイルをリポジトリに送信すると、そのようなことをチームに合わせる必要があります。昨日までは、projファイルをリポジトリに送信するのに慣れていませんでしたが、プロジェクトが大きくなり、構成が難しくなるため、難しくなります。
フェリペ

使用されたSDKと相対パスを統合することは、シンプルで効果的なソリューションです
統合

1
はい。これで、すべてのモジュールが「プロジェクトSDK」をポイントし、チームと連携して同じSDKを使用します。少なくとも、変更する場所は1つだけです。しかし、IntelliJはそれをもっとうまくできるだろう。
フェリペ

23

公式の答えが可能です。現在の(現在はデフォルトの).ideaフォルダープロジェクト形式を使用していると仮定します。

  • すべてを追加...
  • 以外 .idea/workspace.xml(ユーザー固有)を
  • 以外 .idea/tasks.xml(ユーザー固有)を
  • パスワード/キー/その他を含む可能性のある他のいくつかのファイルを除いて(詳細は上記のリンクを参照)

このサンプルの.gitignoreファイルは参考になるかもしれませんが、上記のリンクを読んで、これらのエントリが表示される理由を理解し、それらが必要かどうかを判断する必要があります。

個人的には、.idea/find.xmlファイルを無視します。これは、検索操作を実行するたびに変更されるようです。


1
「サンプルgitignoreファイル」リンクに基づいて、私はそれをさらに一歩進め、これを提供してくれてうれしいです。ベースのアドレスに移動し、さまざまなタイプを組み合わせて「完全な」gitignoreを取得できます。明らかに、Java、Android、Eclipse、IntelliJを使用する私のAndroidプロジェクトの場合:gitignore.io/api/java,android,eclipse,intellij
WernerCD


10

私たちのチームは、パス固有のIntelliJファイルをチェックインしません。IDEの使用方法とプロジェクトの設定方法を知っていると想定します。IntelliJファイルは「無視された」変更リストに入ります。

更新:

答えは、Mavenとそのデフォルトのディレクトリ構造を使用しているので簡単になりました。

IntelliJは/.svn/.idea/targetフォルダー内のすべてのファイルを無視するように求められる必要があります。個人のパス情報に関するすべてがに保存され/.ideaます。

それ以外はすべて、SubversionまたはGitにコミットするための公正なゲームです。


14
プロジェクトの設定はそれほど頻繁には行われないので大したことではありませんが、スクリーンショットなどを電子メールで送信したりせずに、ビルド構成と検査プロファイルを共有できると非常に便利です。

1
個人のパスに依存しないものをチェックインします。
duffymo

2

私のチームが使用した別のアプローチを共有するために:IntelliJが認識しない別の場所にIDE関連ファイルを移動し、GITによって無視される目的の「アクティブな」場所にそれらをコピーするスクリプトを作成するだけです。

このアプローチの利点は、バージョン管理を通じてIDE設定を共有するオプションを維持できることです。唯一の欠点は、スクリプトを実行するタイミング(おそらくワークスペースのクローンごとに1回、または変更が必要な場合)を決定する必要があり、ビルドプロセスまたはマージ後のフックにスクリプトを組み込むことでこれを自動化できることです。

このアプローチは、IntelliJが設定ファイルの特定の場所のみを検索することに依存しているため、フレームワーク構成ファイルにも適用されます。実際、同じ方法でGrailsの.propertiesファイルを無視したので、開発者がローカル構成の変更を誤ってチェックインすることはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.