File Eclipse mana yang termasuk dalam kendali versi?

242

File Eclipse mana yang tepat untuk diletakkan di bawah kendali sumber, selain dari sumbernya jelas?

Dalam proyek saya, khususnya, saya bertanya-tanya tentang:

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

Jika ada hal-hal ini yang menjadi andalannya, mohon jelaskan pedoman Anda.

merah muda
sumber

Jawaban:

175

Metadata seharusnya tidak dikelola dalam kontrol sumber. Sebagian besar berisi data yang relevan dengan ruang kerja Anda .

Satu-satunya pengecualian adalah .launchfile XML (definisi peluncur).

Mereka ditemukan di

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

Dan mereka harus disalin ke direktori proyek Anda: Ketika proyek Anda di-refresh, konfigurasi itu akan ditampilkan dalam dialog "Run configuration".

Dengan begitu, file-file parameter peluncuran tersebut dapat juga dikelola ke dalam SCM.

(Peringatan: Hapus centang opsi "Hapus konfigurasi saat sumber daya yang terkait dihapus" di panel preferensi Run / Launching / Launch Configuration : Adalah umum untuk menghapus-lunak suatu proyek untuk mengimpornya kembali - untuk memaksa reinitialization dari metadata eclipse. Tetapi opsi ini, jika dicentang, akan menghapus parameter peluncuran terperinci Anda!)

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

harus ada dalam SCM Anda (terutama .projectdan .classpathsesuai dengan dokumentasi Eclipse ).

Tujuannya adalah siapa pun dapat checkout / memperbarui ruang kerjanya SCM dan mengimpor proyek Eclipse ke ruang kerja Eclipse.

Untuk itu, Anda hanya ingin menggunakan jalur relatif di .classpath Anda, menggunakan sumber daya yang ditautkan .

Catatan: lebih baik jika project-dirmerujuk ke direktori proyek "eksternal", bukan direktori yang dibuat di bawah ruang kerja gerhana. Dengan begitu, kedua gagasan (ruang kerja gerhana vs. ruang kerja SCM) dipisahkan dengan jelas.


Seperti ipsquiggle menyebutkan dalam komentar, dan seperti yang saya singgung di jawaban lama , Anda sebenarnya dapat menyimpan konfigurasi peluncuran sebagai file bersama langsung di direktori proyek Anda. Semua konfigurasi peluncuran kemudian dapat diversi seperti file proyek lainnya.

(Dari posting blog Tip: Membuat dan Berbagi Konfigurasi Peluncuran dari KD)

teks alternatif

VONC
sumber
16
Alur kerja (IMO) yang jauh lebih baik untuk bekerja dengan apa pun di .metadata untuk file .launch, adalah: ketika Anda mengedit konfigurasi peluncuran, pada commontab, pilih Save as > shared file. Ini secara langsung menjatuhkannya di folder proyek, sehingga dapat SCM dengan sisa proyek.
Ipsquiggle
3
Mengapa .proyek harus dalam SCM? Misalnya, saya ingin menggunakan alat metrik kode yang menyebabkan perubahan pada .project ketika diaktifkan. Saya tidak ingin memaksakan itu pada semua pengguna proyek.
jfritz42
8
@ jfritz42: jika Anda melakukan perubahan lokal dan tepat waktu hanya berlaku untuk Anda, maka buat .projectversi itu diabaikan untuk sementara waktu hanya untuk ruang kerja Anda. Tetapi jangan singkirkan semua pengguna lain dari definisi proyek Eclipse yang umum, mereka dapat dengan cepat mengimpor di ruang kerja Eclipse mereka, hanya karena Anda memiliki satu definisi tambahan yang hanya sesuai dengan kebutuhan Anda saat itu.
VonC
7
Terima kasih. Saya akan mempelajari tautan-tautan itu dengan hati-hati, tetapi saya sudah memperhatikan bahwa di tautan pertama Anda, satu jawaban dimulai "Benar-benar ya", sedangkan yang berikutnya dimulai "Pasti tidak". Google penuh dengan aneka ragam saran pemula yang tidak ramah. Saya mengerti tujuannya, tetapi bagaimana menuju ke sana adalah masalahnya. Saya berasal dari Xcode di mana sumber dan opsi pengguna dipisahkan secara bersih dari Xcode-dihasilkan dan output yang dihasilkan kompiler sehingga pertanyaan ini memiliki jawaban sederhana. Bagi pemula Eclipse, tampaknya file-file itu dicampur bersama dan tersebar. Saya mencari jawaban yang mudah dimengerti
garyp
3
Saya berasal dari tanah VisualStudio, dan saya yang kedua @garyp di sini - ini benar-benar berantakan - jika Eclipse perlu membuat sementara dan / atau tidak perlu melacak file per-pengguna, itu harus meletakkannya di tempat lain, sehingga definisi proyek dan pembangunan dapat dilacak dan semua sampah sementara tidak menghalangi. Apakah tidak ada lagi petunjuk resmi dari tim Eclipse di suatu tempat? (Cukup jelas tim gerhana tidak menguji unit [atau jika mereka melakukannya, mereka tidak melakukannya secara efektif] tetapi setidaknya katakan padaku bahwa mereka menggunakan kontrol sumber! XD)
BrainSlugs83
19

Saat ini saya sedang mengerjakan proyek tempat kami memiliki file .project dan .cproject di bawah kendali sumber. Idenya adalah bahwa pengaturan yang terkait dengan jalur perpustakaan dan arahan tautan akan menyebar di seluruh tim.

Dalam praktiknya itu tidak bekerja dengan baik, penggabungan hampir selalu kembali dalam keadaan konflik yang perlu diuraikan di luar gerhana dan kemudian proyek ditutup dan dibuka kembali agar perubahan diterapkan.

Saya tidak akan merekomendasikan menjaga mereka dalam kontrol sumber.

pdemarest
sumber
14

Tidak ada artinya jika file konfigurasi CDT tidak ramah-sumber. Ada bug yang diajukan untuk file .cproject berubah sangat sering dan menyebabkan konflik, lihat Berbagi file proyek cdt dalam repositori selalu menyebabkan konflik .

Diaa Sami
sumber
Astaga - bug ini berumur enam tahun dan masih belum tersentuh. Jelas dukungan kontrol sumber bukan prioritas untuk tim Eclipse!
BrainSlugs83
2
Perlu juga dicatat bahwa file .cproject berisi informasi konfigurasi yang Anda lebih suka tidak memaksa pengembang lain harus membuat ulang secara manual. Ugh.
Christopher Barber
7

Beberapa proyek, seperti yang menggunakan Maven, ingin membuat file proyek berdasarkan POM.

Yang mengatakan, selain itu - .metadata TIDAK boleh dalam kontrol sumber. Proyek Anda harus menentukan apakah pengaturan proyek, berdasarkan bagaimana Anda merencanakan untuk mengelola standar dan semacamnya. Jika Anda dapat dengan jujur ​​mempercayai pengembang Anda untuk mengatur lingkungan mereka berdasarkan standar, dan Anda tidak harus menyesuaikan apapun yang khusus untuk proyek apa pun, maka Anda tidak perlu memasukkannya. Saya, saya sarankan mengonfigurasi setiap proyek secara khusus . Hal ini memungkinkan pengembang untuk mengerjakan hal-hal multi proyek dalam ruang kerja yang sama tanpa harus mengubah pengaturan default bolak-balik, dan itu membuat pengaturan sangat eksplisit, menimpa apa pun pengaturan default mereka agar sesuai dengan standar proyek.

Hanya bagian yang sulit adalah memastikan mereka semua tetap sinkron. Tetapi dalam kebanyakan kasus Anda dapat menyalin file .settings dari proyek ke proyek. Jika ada yang secara spesifik tidak Anda inginkan dalam kontrol sumber, lakukan hal yang sama dengan pengaturan svn: abaikan untuk mereka, jika SCM Anda mendukungnya.

John Stoneham
sumber
2
Kami menggunakan Maven 1 dan 2, dan itu hanya menghasilkan file proyek. Jika Anda memintanya. Dan bahkan jika Anda melakukannya, itu didasarkan pada isi POM, jadi jika pengembang lain telah melakukan langkah itu untuk Anda dan memeriksa hasilnya ke dalam kontrol versi, mengapa tidak mengambil keuntungan dari itu?
Andrew Swan
6

File .classpath secara definitif adalah kandidat yang bagus untuk memeriksa scm karena pengaturannya dengan tangan bisa menjadi banyak pekerjaan dan akan sulit bagi pengembang baru untuk memasuki proyek. Memang benar itu dapat dihasilkan dari sumber lain, dalam hal ini Anda akan memeriksa di sumber lain.

Adapun pengaturan., Itu tergantung pada pengaturan. Ini adalah area abu-abu, tetapi beberapa pengaturan hampir wajib dan nyaman untuk dapat memeriksa proyek, mengimpornya di Eclipse dan mengatur semuanya dan siap untuk digunakan.

Oleh karena itu, di proyek kami, kami menyimpan salinan folder .settings yang disebut CVS.settings dan kami memiliki tugas semut untuk menyalinnya ke .settings. Ketika Anda mendapatkan proyek dari CVS, Anda memanggil tugas semut 'eclipsify' untuk menyalin pengaturan default ke folder .settings baru. Saat Anda mengonfigurasi pengaturan yang diperlukan oleh semua orang yang mengembangkan proyek, Anda menggabungkannya kembali ke folder pengaturan CVS dan mengkomitnya ke CVS. Dengan cara ini menyimpan pengaturan di SCM menjadi proses yang disadari. Memang diperlukan devs untuk menggabungkan pengaturan itu kembali ke folder .settings mereka dari waktu ke waktu ketika perubahan besar diperiksa. Tapi itu adalah sistem sederhana yang bekerja dengan sangat baik.

Stijn de Witt
sumber
4

Saya akan mengatakan tidak satupun dari mereka. Mereka kemungkinan besar berisi informasi yang relevan hanya untuk workstation Anda (saya sedang memikirkan jalur untuk perpustakaan dan semua). Juga bagaimana jika seseorang di tim Anda tidak menggunakan Eclipse?

agnul
sumber
3
Tidak, Anda dapat memiliki jalur relatif di .classpath Anda. Lihat stackoverflow.com/questions/300328#300346 .
VonC
7
Kedengarannya seperti tim yang cukup tidak koheren / tidak efisien jika mereka tidak menggunakan pengembang yang sama. alat, proyek, debug, dan definisi bangunan, dll. - Selanjutnya Anda akan memberitahu saya untuk tidak menggunakan standar pengkodean umum atau JDK. - Idealnya, pengguna harus dapat menarik proyek dari kontrol sumber dan langsung masuk tanpa banyak pengaturan atau instruksi tambahan. Jadi jawaban ini jelas tidak dapat diterima bagi saya.
BrainSlugs83
1
Jauh lebih tidak efisien untuk menangani konflik dalam file preferensi selama penggabungan, hanya karena seseorang membuka proyek dari ruang kerja baru - ini adalah mimpi buruk dalam proyek-proyek besar. Selain itu, memaksa untuk menggunakan IDE yang sama dengan konfigurasi yang persis sama terdengar seperti batasan yang tidak perlu.
A. Rodas
Saya setuju dengan [~ agnul]. Proyek harus menggunakan beberapa alat bangun (gradle, maven, semut, dll ...) dan IDE harus dapat membuka dan mengonfigurasi proyek dari file konfigurasi alat bangun (build.gradle, pom.xml, build.xml, dll ...) Tidak ada file IDE yang harus dikontrol versi. Mereka semua adalah file khusus pengembang, bukan file proyek spesifik. Mereka yang sederhana tidak termasuk dalam kontrol versi.
axiopisty
2

Mempertimbangkan:

.classpath
.project
.launch

Ini HARUS berada dalam kontrol versi selama Anda tetap menggunakan jalur relatif proyek. Hal ini memungkinkan pengembang lain untuk memeriksa proyek dan mulai bekerja segera tanpa harus melewati semua kesulitan setup yang dialami pengembang lain juga.

Anda mungkin tergoda untuk memasukkan .metadata dalam kontrol versi juga sehingga pengembang Eclipse dapat memeriksa seluruh ruang kerja dan memilikinya pra-konfigurasi dengan semua proyek yang tepat, tetapi itu mencakup banyak informasi khusus pengguna yang kapan saja ada orang yang mengerjakannya, itu akan berubah, jadi saya akan menyarankan untuk TIDAK TERMASUK .metadata. Sangat mudah untuk membangun ruang kerja lokal hanya dengan mengimpor semua proyek Eclipse yang ada.

Alex McCarrier
sumber
Dalam pengalaman saya, ini cenderung pecah dengan berbagai cara ketika Anda memperbarui Eclipse ke versi yang lebih baru, atau beralih di antara rasa.
Thorbjørn Ravn Andersen
1

Saya telah menghabiskan terlalu banyak waktu mengonfigurasi pengaturan ruang kerja gerhana untuk kolega baru (dan saya sendiri). Yang akhirnya saya lakukan adalah menyalin .metadata saya sendiri ke mesin pengembang baru.

Jika Anda bekerja dalam tim, maka saya pikir berikut ini adalah kandidat yang sangat baik untuk tetap di bawah kontrol versi:

  • Menginstal JRE dan nama mereka
  • Lingkungan Server Runtime
  • Template Editor Java
  • Kontrol Versi Pintasan Keyboard
  • Pengaturan plugin yang tidak menyediakan pengaturan spesifik proyek
  • Pengaturan maven
  • Perspektif yang Dikonfigurasikan sebelumnya
  • ...
Reto Höhener
sumber