Haruskah saya menyimpan file proyek saya di bawah kontrol versi? [Tutup]

87

Haruskah saya menyimpan file proyek seperti .proyek Eclipse, .classpath, .settings, di bawah kontrol versi (misalnya Subversion, GitHub, CVS, Mercurial, dll)?

cretzel
sumber
12
Sangat konstruktif
QED

Jawaban:

93

Anda ingin tetap mengontrol versi file pengaturan portabel apa pun ,
artinya:
File apa pun yang tidak memiliki jalur absolut di dalamnya.
Itu termasuk:

  • .proyek,
  • .classpath ( jika tidak ada jalur absolut yang digunakan , yang dimungkinkan dengan penggunaan variabel IDE, atau variabel lingkungan pengguna)
  • Pengaturan IDE (di mana saya sangat tidak setuju dengan jawaban 'diterima'). Setelan tersebut sering kali menyertakan aturan analisis kode statis yang sangat penting untuk diterapkan secara konsisten bagi setiap pengguna yang memuat project ini ke ruang kerjanya.
  • Rekomendasi pengaturan khusus IDE harus ditulis dalam file README yang besar (dan tentu saja berversi).

Aturan praktis bagi saya:
Anda harus dapat memuat proyek ke dalam ruang kerja dan memiliki semua yang Anda butuhkan di dalamnya untuk mengaturnya dengan benar di IDE Anda dan memulai dalam beberapa menit.
Tidak ada dokumentasi tambahan, halaman wiki untuk dibaca atau apa yang tidak.
Muat, siapkan, pergi.

VonC
sumber
@ Rich: terima kasih. Untuk pembaca lainnya, lihat jawaban Rich untuk pertanyaan yang sama satu tahun kemudian: stackoverflow.com/questions/1429125/…
VonC
3
fase kunci "... mulai dalam beberapa menit ..."
Eric Labashosky
3
Jadi, repositori VC harus memiliki file konfigurasi untuk setiap IDE? NetBeans, Eclipse, Emacs, vi, ada lagi? Saya secara khusus tidak setuju dengan gagasan bahwa file-file ini karena pengembang harus bertanggung jawab untuk menyiapkan IDE mereka sendiri.
RHSeeger
3
@RH - "... harus bertanggung jawab untuk menyiapkan IDE mereka sendiri". Tidak apa-apa, sampai beberapa badut lupa menyetel properti gaya kode Eclipse mereka .... dan memeriksa file sumber dengan TAB di dalamnya. Grrrr !!
Stephen C
2
Saya juga tidak setuju - jika Anda menggunakan CI, beberapa versi, platform, IDE, dll. Ini merusak KERING cukup parah. Esp. karena plugin / pengaturan yang berbeda memiliki pengaruh besar pada apa yang berakhir di sini.
jayshao
30

file .project dan .classpath ya. Namun kami tidak menyimpan pengaturan IDE kami dalam kontrol versi. Ada beberapa plugin yang tidak melakukan pekerjaan dengan baik untuk pengaturan yang ada dan kami menemukan bahwa beberapa pengaturan tidak terlalu portabel dari satu mesin dev ke mesin berikutnya. Jadi, kami memiliki halaman Wiki yang menyoroti langkah-langkah yang diperlukan pengembang untuk menyiapkan IDE mereka.

Kevin
sumber
2
-1 Saya sarankan untuk mengajukan laporan bug untuk plugin tersebut daripada membiarkannya membuang-buang waktu ribuan orang. Dan kemudian, saya akan meletakkan semua file pengaturan stabil di bawah kontrol versi dan memangkas halaman Wiki itu ke tulang telanjang.
Aaron Digulla
18

Ini adalah apa yang saya anggap sebagai file yang dihasilkan, dan karena itu saya tidak pernah menempatkannya di bawah kontrol versi. Mereka dapat berbeda dari mesin ke mesin dan pengembang ke pengembang, misalnya ketika orang memasang plugin Eclipse yang berbeda.

Sebagai gantinya, saya menggunakan alat build (Maven) yang dapat menghasilkan versi awal dari file ini saat Anda melakukan pembayaran baru.

Chris Vest
sumber
Tepatnya: mvn eclipse: eclipse akan menghasilkan .classpath dan .project yang sesuai. Anda dapat meneruskannya -DdownloadSources = true dan -DdownloadJavadocs = true.
Aleksandar Dimitrov
Anda juga dapat mengkonfigurasi plugin eclipse di pom Anda untuk selalu mendownload sumber dan javadoc.
Chris Vest
1
-1 Ini berfungsi selama Anda tidak pernah mengubah pengaturan proyek di IDE Anda. Dan bahayanya adalah: Jika Anda mengubahnya, Anda tidak akan menyadarinya karena file tersebut tidak diversi. Jadi saya sangat tergoda untuk menolak ini. Lakukan ini hanya untuk proyek yang sangat sederhana seperti yang tidak ingin Anda bagikan dengan siapa pun. Dalam sebuah tim, default biasanya tidak berfungsi dan meminta setiap pengembang untuk mengubah pengaturan mereka adalah resep pasti untuk kekacauan.
Aaron Digulla
Aaron, ini berfungsi bahkan jika Anda mengubah file proyek di IDE Anda. Apa yang terjadi selanjutnya, adalah Anda tidak memaksakan perubahan Anda ke tim yang tidak menaruh curiga. Proyek IDE cenderung berisi informasi khusus mesin dan pengembang, yang tidak akan berfungsi untuk semua orang. Saya menemukan bahwa semakin banyak plug-in yang Anda gunakan, dan semakin kompleks penggunaan IDE Anda, semakin buruk hasilnya. Orang harus tahu cara kerja alat mereka, dan memiliki kendali atas konfigurasi mereka. Saya lakukan , bagaimanapun, setuju bahwa pendekatan ini bukan tanpa menetapkan sendiri masalah.
Chris Vest
Selain itu, memperbaiki konflik penggabungan yang disebabkan oleh pengaya yang sembarangan mengedit file-file ini menjadi cepat tua.
Chris Vest
7

Saya bingung antara dua opsi di sini.

Di satu sisi, saya pikir setiap orang harus bebas menggunakan seperangkat alat pengembangan yang paling produktif dengan mereka, selama semua artefak sumber disimpan dalam kontrol versi, dan skrip build (katakanlah ANT atau Maven) memastikan kepatuhan standar oleh menentukan secara tepat JDK mana yang akan digunakan, versi library pihak ketiga mana yang akan bergantung, menjalankan pemeriksaan gaya (misalnya, checkstyle) dan menjalankan pengujian unit, dll.

Di sisi lain, saya pikir begitu banyak orang menggunakan alat yang sama (mis. Eclipse) dan seringkali jauh lebih baik untuk memiliki beberapa hal yang distandarisasi pada waktu desain daripada waktu pembuatan - misalnya Checkstyle jauh lebih berguna sebagai plugin Eclipse daripada sebagai tugas ANT atau Maven - lebih baik melakukan standarisasi pada set alat pengembangan dan seperangkat plugin umum.

Saya mengerjakan proyek di mana setiap orang menggunakan JDK yang sama persis, versi Maven yang sama, versi Eclipse yang sama, kumpulan plugin Eclipse yang sama dan file konfigurasi yang sama (misalnya profil Checkstyle, aturan pemformat kode, dll.). Semua ini disimpan dalam kontrol sumber - .project, .classpath, dan semua yang ada di folder .settings. Itu membuat hidup sangat mudah selama fase awal proyek ketika orang-orang terus menyesuaikan dependensi atau proses build. Ini juga sangat membantu ketika menambahkan permulaan baru ke proyek.

Secara seimbang, menurut saya jika tidak ada terlalu banyak peluang untuk perang agama, Anda harus menstandarkan set dasar alat pengembangan dan plugin dan memastikan kepatuhan versi dalam skrip build Anda (misalnya dengan secara eksplisit menentukan versi Java). Jangan berpikir bahwa menyimpan JDK dan penginstalan Eclipse dalam kontrol sumber memiliki banyak manfaat. Segala sesuatu yang lain yang bukan artefak turunan - termasuk file proyek, konfigurasi dan preferensi plugin Anda (terutama pemformat kode dan aturan gaya) - harus masuk ke kontrol sumber.

PS Jika Anda menggunakan Maven, ada argumen untuk mengatakan bahwa file .project dan .classpath adalah artefak turunan. Ini hanya berlaku jika Anda membuatnya setiap kali Anda melakukan build, dan jika Anda tidak pernah harus mengubahnya secara manual (atau secara tidak sengaja mengubahnya dengan mengubah beberapa preferensi) setelah membuatnya dari POM

Vihung
sumber
6

Tidak, karena saya hanya file kontrol versi yang diperlukan untuk membangun perangkat lunak. Selain itu, pengembang individu mungkin memiliki pengaturan khusus proyek mereka sendiri.

John Topley
sumber
5

Tidak, saya adalah pengguna berat Maven dan menggunakan plugin Q for Eclipse yang membuat dan terus memperbarui .project dan .classpath. Untuk hal-hal lain seperti pengaturan plugin, saya biasanya menyimpan halaman README atau Wiki tentang itu.

Juga mereka yang pernah bekerja dengan saya yang lebih memilih IDE lain, cukup gunakan Maven-plugins untuk menghasilkan file yang dibutuhkan agar IDE mereka (dan diri mereka sendiri) tetap menyenangkan.

Andreas Holstenson
sumber
5

Ini semua pendapat, saya kira - tetapi praktik terbaik selama bertahun-tahun menunjukkan bahwa file khusus untuk IDE tertentu tidak boleh disimpan dalam kontrol sumber, kecuali seluruh organisasi Anda distandarisasi pada satu IDE dan Anda tidak pernah berniat untuk beralih.

Apa pun itu, Anda pasti tidak ingin pengaturan pengguna disimpan - dan .project dapat berisi pengaturan yang benar-benar khusus pengembang.

Saya merekomendasikan menggunakan sesuatu seperti Maven atau Ant sebagai sistem build standar. Setiap pengembang bisa mendapatkan classpath yang dikonfigurasi dalam IDE mereka dalam beberapa detik.

Kevin Day
sumber
1

Ya, kecuali untuk folder .settings. Mengkomit file lain berfungsi dengan baik untuk kami. Ada pertanyaan serupa di sini .

Jay R.
sumber
1

Meskipun saya biasanya setuju dengan pendekatan "jangan versi file yang dihasilkan", kami memiliki masalah dengan itu dan harus beralih kembali.

Catatan: Saya juga tertarik dengan jawaban VonC , terutama tentang poin "dapatkan Eclipse dalam beberapa menit". Tapi itu tidak menentukan bagi kami.

Konteks kami adalah Eclipse + Maven, menggunakan plug-in m2eclipse. Kami memiliki lingkungan pengembangan yang sama, dengan direktori yang sama sebanyak mungkin. Namun terkadang seseorang mencoba plugin, atau mengubah hal-hal kecil dalam konfigurasi, atau mengimpor ruang kerja kedua untuk cabang yang berbeda ...

Masalah kita adalah pembuatan .project dilakukan saat mengimpor proyek di Eclipse, tetapi tidak diperbarui dalam semua kasus nanti . Ini menyedihkan, dan mungkin tidak permanen karena plug-in m2eclipse akan meningkat, tetapi itu benar sekarang. Jadi kami akhirnya memiliki konfigurasi yang berbeda. Apa yang kami miliki hari ini adalah: beberapa sifat ditambahkan ke banyak proyek pada beberapa mesin, yang kemudian berperilaku jauh berbeda :-(

Satu-satunya solusi yang kami lihat adalah versi file .project (untuk menghindari risiko, kami akan melakukan hal yang sama untuk .classpath dan .settings). Dengan begitu, ketika satu pengembang mengubah pomnya, file lokal diperbarui menggunakan m2eclipse, semuanya terikat bersama, dan pengembang lain akan melihat semua perubahan.

Catatan: dalam kasus kami, kami menggunakan nama file relatif, jadi kami tidak memiliki masalah untuk membagikan file tersebut.

Jadi, untuk menjawab pertanyaan Anda, saya katakan ya, lakukan file-file itu.


Saya juga menyukai:

KLE
sumber
"... mengganti pomnya menggunakan m2eclipse ..."? Apa hubungan m2eclipse dengan file pom? Tentu saja ia menggunakannya, tetapi perubahan pada pom harus independen dari plugin.
RHSeeger
@RHSeeger Terima kasih, saya akan meningkatkan kejelasan pada bagian jawaban saya ini.
KLE
0

Sepertinya file proyek ini dapat berubah seiring waktu saat Anda mengerjakan proyek jadi ya, saya menempatkannya di bawah kontrol versi.

neuroguy123
sumber
0

Iya. Semuanya kecuali membangun keluaran.

nitind
sumber
0

Kami menggunakan IntelliJ IDEA, dan menyimpan versi '.sample' dari file proyek (.ipr) dan modul (.iml) di bawah kontrol versi.

Hal yang lebih besar di sini adalah berbagi dan menggunakan kembali daripada membuat versi, IMHO. Tetapi jika Anda akan membagikan konfigurasi ini, tempat apa yang lebih baik untuk meletakkannya selain repositori, tepat di sebelah yang lainnya.

Beberapa keuntungan dari file proyek bersama & berversi:

  • Anda dapat memeriksa tag / cabang apa saja dan mulai mengerjakannya dengan cepat
  • Mempermudah pengembang baru untuk terlebih dahulu menyiapkan lingkungan pengembangan dan mempercepat proses
  • Ini lebih baik menganut KERING, yang selalu sangat memuaskan. Sebelum ini, semua pengembang harus mengatur hal-hal ini sesekali, pada dasarnya melakukan pekerjaan berulang. Tentu saja setiap orang memiliki cara kecil mereka sendiri untuk menghindari pengulangan, tetapi melihat tim secara keseluruhan, ada banyak usaha yang diduplikasi.

Perhatikan bahwa di IDEA file ini berisi konfigurasi seperti: apa yang dimaksud dengan dirs "source" dan "test source"; segala sesuatu tentang dependensi eksternal (di mana letak library jars, serta sumber terkait atau javadocs); opsi build, dll. Ini adalah hal-hal yang tidak berbeda dari pengembang ke pengembang (saya tidak setuju dengan ini ). IDEA menyimpan lebih banyak pengaturan IDE pribadi di tempat lain, serta konfigurasi plugin apa pun. (Saya tidak begitu mengenal Eclipse; ini mungkin atau mungkin tidak terlalu berbeda.)

Saya setuju dengan jawaban ini yang mengatakan:

Anda harus dapat memuat proyek ke dalam ruang kerja dan memiliki semua yang Anda butuhkan untuk menyiapkannya dengan benar di IDE Anda dan memulai dalam beberapa menit. [...] Muat, atur, pergi.

Dan kami memilikinya seperti ini, berkat file proyek berversi.

Jonik
sumber