Saya tahu banyak toko perangkat lunak menjaga binari di bawah kendali sumber . Namun, toko kami datang untuk menyimpan seluruh kerangka kerja di repositori: DirectX runtime, CUDA, nVidia Optix, apa pun.
Dikatakan untuk membuat setup mesin dev lebih mudah (seharusnya, dapatkan terbaru dan mulai coding). Namun, itu jauh membengkak repositori dan membebani dengan sejarah yang tidak relevan.
Saya belum pernah melihat pola penggunaan seperti itu. Apakah Anda menganggapnya sebagai praktik yang baik?
[EDIT:] Saya tidak punya masalah dengan binari pihak ke-3 yang dikendalikan oleh sumber. Pertanyaannya merujuk pada seluruh runtime framework, biasanya terdiri dari 10+ binari. Sebagai contoh ekstrem, ambil Windows SDK (yang kami tidak simpan di repositori, terima kasih Tuhan, tapi saya tidak melihat perbedaan pada prinsipnya).
sumber
Jawaban:
Binari pada umumnya tidak cocok untuk sistem kontrol versi karena:
cd
+rm
!)sumber
Saya baik-baik saja dengan versi mengendalikan aset biner. Saya menentang versi mengendalikan file yang dihasilkan .
Selain itu, pengaturan lingkungan adalah sesuatu yang berbeda dari pengembangan. Kami sebagian besar berkembang di Python dan memiliki alat yang disebut virtualenv yang memungkinkan Anda untuk membuat lingkungan terisolasi yang ringan (termasuk perpustakaan) untuk sebuah proyek. Ketika kami memeriksa sumber kami, kami memiliki skrip setup di sana yang membangun virtualenv ini. Menggunakan manifes, ini menentukan versi perpustakaan apa yang dibutuhkan dan hal-hal lain semacam itu. Tidak satu pun dari ini yang dikontrol versi. Hanya skrip pengaturan.
Melemparkan seluruh kerangka kerja di bawah proyek utama Anda akan mengacaukan sejarah Anda dan secara serius mengacaukan segalanya. Itu bukan bagian dari proyek Anda dan harus diperlakukan berbeda.
sumber
Secara umum ide yang baik untuk melakukan manajemen konfigurasi dengan versi kerangka kerja. Jika kode Anda memerlukan versi DirectX tertentu, versi itu harus mudah tersedia, dan jika Anda memeriksa versi lama dari perangkat lunak Anda, itu harus mudah untuk menentukan dependensi eksternal yang dimilikinya.
Apa yang saya pikir bukan ide yang baik di sini adalah menggunakan sistem kontrol versi khas Anda untuk menyimpan binari tersebut. Di perusahaan kami, kami menyimpan setiap versi kerangka kerja, pustaka, dan alat eksternal dalam struktur subfolder pada drive jaringan. Jika menurut kami masuk akal, kami memiliki file readme untuk mendokumentasikan versi alat mana yang merupakan versi perangkat lunak mana, atau, jika mungkin, kami memiliki skrip untuk menginstal atau menggunakan versi tertentu. Hanya file dan skrip readme yang masuk ke kontrol versi.
Kami juga menyimpan versi alat dan pustaka yang lebih lama selama kami pikir mungkin ada peluang kami harus membangun kembali dan versi yang lebih lama tergantung pada alat itu. Dengan begitu hal itu memberi kami kemungkinan untuk menghapus beberapa lib & alat yang sangat lama dari drive jaringan kami ketika sudah usang (tentu saja, kalau-kalau kami memiliki arsip di media eksternal).
sumber
Saya pikir biner harus disimpan di suatu tempat. Saya sarankan menyimpannya di luar repositori, terutama jika mereka besar dan mengarah ke waktu check out yang besar. Saya tidak akan melihat itu latihan yang buruk, tetapi juga bukan yang saya lihat.
Ini sebenarnya mungkin ide yang baik jika organisasi Anda memiliki banyak proyek yang menargetkan versi runtime yang berbeda. Ini memastikan bahwa Anda memiliki biner runtime yang tepat ketika Anda mengerjakan proyek yang tepat.
sumber
Saya pribadi menganggap ini praktik yang sangat buruk. Saya lebih suka membuat wiki dengan instruksi instalasi dan mengunggah binari yang diperlukan ke sana. File-file ini hanya dibutuhkan oleh pengembang baru, tidak perlu mengasapi repositori orang lain.
sumber
Ada alasan bagus untuk melakukan ini, yaitu Anda memiliki semua yang Anda butuhkan di satu lokasi, tanpa ketergantungan eksternal.
Ini jauh lebih penting daripada yang mungkin Anda pikirkan. Ini pada dasarnya memastikan bahwa Anda tidak bergantung pada artefak pada server vendor yang mungkin hilang setelah beberapa tahun, karena Anda memiliki semuanya di rumah.
Mengenai mengasapi repositori. Ini hanya masalah jika VCS Anda menyimpan salinan lokal lengkap (git melakukan ini, cv tidak) karena kloning dan / atau pembaruan akan lambat. Sebagai gantinya Anda akan memiliki salinan pada setiap mesin pengembangan, yang dapat menyelamatkan perusahaan Anda jika skema cadangan pusat Anda karena suatu alasan gagal suatu hari.
Ini masalah prioritas atau kebijakan. Selama keputusan itu disengaja, saya akan baik-baik saja dengan ini.
sumber