Semua orang di tim kami menggunakan IntelliJ IDEA, dan kami merasa berguna untuk menempatkan file proyeknya (.ipr dan .iml) ke dalam kontrol sumber sehingga kami dapat berbagi konfigurasi, pengaturan, dan inspeksi pembangunan. Plus, kita kemudian dapat menggunakan pengaturan inspeksi tersebut di server integrasi berkesinambungan kami dengan TeamCity. (Kami memiliki file .iws ruang kerja per-pengguna dalam file .gitignore dan tidak dalam kontrol sumber.)
Namun, file-file itu berubah sedikit ketika Anda melakukan apa saja di IDEA. Ada masalah dalam database isu IDEA untuk itu ( IDEA-64312 ), jadi mungkin orang mungkin menganggap ini sebagai bug di IDEA, tetapi itu adalah salah satu yang kita harus hidup dengan untuk masa yang akan datang.
Hingga baru-baru ini, kami menggunakan Subversion, tetapi kami baru-baru ini beralih ke Git. Kami masing-masing baru saja terbiasa dengan daftar perubahan file proyek yang kami abaikan dan tidak check-in kecuali ada perubahan file proyek yang ingin kami bagi dengan orang lain. Tetapi dengan Git, kekuatan sebenarnya tampaknya (dari apa yang kami eksplorasi) percabangan berkelanjutan yang didukungnya, dan beralih di antara cabang-cabang adalah masalah dengan file proyek yang selalu dimodifikasi. Seringkali itu hanya bisa menggabungkan perubahan entah bagaimana, dan mencoba menangani perubahan file proyek sekarang sedang diterapkan ke cabang baru. Namun, jika cabang baru telah mengubah file proyek (seperti cabang sedang bekerja pada modul baru yang belum ada di cabang lain), git hanya melempar kesalahan bahwa itu tidak t masuk akal untuk menggabungkan file ketika kedua cabang memiliki perubahan dan Anda memiliki perubahan secara lokal, dan saya lebih suka mengerti maksudnya. Dari baris perintah, seseorang dapat menggunakan "-f" pada perintah "git checkout" untuk memaksanya membuang perubahan lokal dan menggunakan cabang itu, tetapi (1) perintah Git Checkout GUI di IDEA (10.5.1) sepertinya tidak memiliki itu sebagai opsi yang dapat kita temukan, jadi kita perlu beralih ke baris perintah secara teratur, dan (2) Kami tidak yakin kami ingin terbiasa menggunakannya beri tanda dan beri tahu Git untuk membuang perubahan lokal kami.
Jadi, berikut adalah beberapa pemikiran yang kami miliki tentang opsi yang harus kami tangani dengan ini:
- Keluarkan file proyek sepenuhnya dari kendali sumber. Letakkan mereka di .gitignore, dan bagikan ke setiap orang dan TeamCity melalui beberapa cara lain, mungkin dengan menempatkan mereka dalam kendali sumber di tempat lain atau dengan nama lain. Tim kami cukup kecil sehingga opsi ini layak untuk dipertimbangkan, tetapi sepertinya tidak terlalu bagus.
- Lanjutkan hidup dengannya, berusaha memastikan untuk mengelola file mana yang kami miliki di cabang mana pada waktu tertentu. Sebagai bagian dari ini, kami dapat mendorong setiap pengembang untuk memiliki lebih dari satu salinan dari setiap proyek pada sistem mereka, sehingga mereka dapat memeriksa masing-masing ke cabang yang berbeda dengan set file proyek yang mungkin berbeda.
- Coba saja proyek (.ipr) dalam kontrol sumber, dengan file modul (.iml) tidak dalam kontrol sumber dan dalam file .gitignore. Hal utama yang tampaknya beralih sendiri di .ipr secara teratur adalah urutan konfigurasi build bersama, tapi mungkin kita bisa membagikan informasi secara terpisah tentang cara mengaturnya. Saya tidak begitu yakin bagaimana IDEA menangani hal semacam ini hanya memiliki beberapa file saja, terutama pada checkout baru.
Saya kira saya berharap ada beberapa solusi yang jelas (atau tidak jelas) yang kami lewatkan, mungkin berurusan dengan kemampuan penyesuaian besar yang tampaknya dimiliki Git dan IDEA. Tapi sepertinya kita bukan satu-satunya tim yang mengalami masalah ini. Pertanyaan yang agak mirip pada Stack Overflow termasuk 3495191 , 1000512 , dan 3873872 , tapi saya tidak tahu karena mereka persis masalah yang sama, dan mungkin seseorang dapat datang dengan pro dan kontra untuk berbagai pendekatan yang telah saya diuraikan, pendekatan yang tercantum dalam jawaban atas pertanyaan-pertanyaan itu, atau pendekatan yang mereka rekomendasikan.
Jawaban:
Anda dapat menggunakan struktur proyek berbasis direktori IDEA , di mana pengaturan disimpan dalam direktori .idea bukan file .ipr. Ini memberikan kontrol lebih halus atas apa yang disimpan dalam kontrol versi. File .iml masih ada, sehingga tidak menyelesaikan perubahan acak di dalamnya (mungkin menjaga mereka di luar kendali sumber?), Tetapi berbagi hal-hal seperti gaya kode dan profil inspeksi mudah, karena masing-masing akan dalam file sendiri di bawah direktori .idea.
sumber
Dari DOC resmi: http://devnet.jetbrains.com/docs/DOC-1186
Saya meletakkannya di .gitignore saya:
sumber
Sebuah jawaban resmi tersedia . Dengan asumsi Anda menggunakan
.idea
format proyek folder modern (dan sekarang default) :.idea/workspace.xml
(yang khusus untuk pengguna).idea/tasks.xml
(yang khusus untuk pengguna)File .gitignore sampel ini mungkin menjadi referensi yang berguna, meskipun Anda masih harus membaca tautan di atas untuk memahami mengapa entri ini muncul dan memutuskan apakah Anda membutuhkannya.
Secara pribadi saya juga mengabaikan
.idea/find.xml
file karena ini tampaknya berubah setiap kali Anda melakukan operasi pencarian.sumber
Saya mengambil workspace.xml dari kontrol sumber (+ ditambahkan ke .gitignore).
sumber
Tim kami tidak memeriksa dalam file IntelliJ jalur khusus. Kami berasumsi bahwa orang tahu bagaimana menggunakan IDE dan mengatur proyek. File IntelliJ masuk ke daftar perubahan 'diabaikan'.
MEMPERBARUI:
Jawabannya lebih mudah sekarang karena saya menggunakan Maven dan struktur direktori default-nya.
IntelliJ harus diminta untuk mengabaikan semua file di
/.svn
,/.idea
dan/target
folder. Segala sesuatu yang berkaitan dengan informasi jalur individu disimpan di/.idea
.Yang lainnya adalah permainan yang adil untuk dilakukan pada Subversion atau Git.
sumber
Hanya untuk membagikan pendekatan lain yang digunakan tim saya: Pindahkan saja file apa pun yang terkait dengan IDE ke lokasi berbeda di mana IntelliJ tidak mengenali, dan buat skrip untuk menyalinnya ke lokasi 'aktif' yang diinginkan yang diabaikan oleh GIT.
Manfaat dari pendekatan ini adalah Anda menyimpan opsi berbagi pengaturan IDE melalui kontrol versi. Satu-satunya kelemahan adalah Anda harus memutuskan kapan harus menjalankan skrip (mungkin sekali per klon ruang kerja atau ketika perubahan diinginkan), dan Anda dapat mengotomatiskan ini dengan memasukkan skrip dalam proses pembuatan atau kait pasca penggabungan.
Pendekatan ini bergantung pada IntelliJ yang hanya mencari lokasi tertentu untuk file pengaturannya, jadi itu juga berlaku untuk file konfigurasi kerangka kerja. Sebenarnya kami mengabaikan file .properties Grails dengan cara yang sama, sehingga pengembang tidak akan sengaja memeriksa perubahan konfigurasi lokal mereka.
sumber