"Tergantung." Untuk pelacakan pengembangan normal, tidak. Namun, untuk penggunaan cloud dan DevOps, sering kali nyaman, atau bahkan diperlukan.
Sebagian besar waktu,
@ ptyx benar . Memang, "tidak" nya bisa dinyatakan agak lebih tegas. Sesuatu seperti "Tidak. Tidak! OMG TIDAK! "
Mengapa tidak menyimpan aset yang diperkecil atau dikompresi dalam sistem kontrol sumber seperti Git?
Mereka hampir bisa dibuat ulang secara sepele oleh proses build Anda dengan cepat dari kode sumber. Menyimpan aset terkompresi pada dasarnya menyimpan konten logis yang sama dua kali. Itu melanggar prinsip "jangan ulangi dirimu sendiri" (alias KERING ).
Alasan yang kurang filosofis tetapi lebih praktis adalah bahwa aset yang diperkecil / dioptimalkan memiliki kompresibilitas yang sangat buruk ketika disimpan di Git. Sistem kontrol sumber bekerja dengan mengenali perubahan ("delta") antara versi yang berbeda dari setiap file yang disimpan. Untuk melakukan itu, mereka "membedakan" file terbaru dengan versi sebelumnya, dan dan menggunakan delta-delta ini untuk menghindari penyimpanan salinan lengkap dari setiap versi file. Tetapi transformasi yang dilakukan pada langkah minify / optimalkan sering menghilangkan kesamaan dan titik arah yang digunakan algoritma diff / delta . Contoh paling sepele adalah menghapus jeda baris dan spasi putih lainnya; aset yang dihasilkan seringkali hanya satu garis panjang. Banyak bagian dari proses pembuatan Web - alat seperti Babel , UglifyJS , Browserify ,Kurang , dan Sass / SCSS - secara agresif mengubah aset. Keluaran mereka gelisah; perubahan input kecil dapat menyebabkan perubahan besar dalam output. Alhasil, algoritma-diff akan sering percaya itu melihat hampir semua file yang berbeda setiap kali. Akibatnya, repositori Anda akan tumbuh lebih cepat. Disk Anda mungkin cukup besar dan jaringan Anda cukup cepat yang tidak menjadi masalah besar, terutama jika ada nilai untuk menyimpan aset yang diperkecil / dioptimalkan dua kali - meskipun berdasarkan poin 1, salinan tambahan mungkin hanya 100% tidak berguna mengasapi.
Namun, ada pengecualian untuk hal ini: DevOps / cloud deployments. Sejumlah vendor cloud dan tim DevOps menggunakan Git dan sejenisnya tidak hanya untuk melacak pembaruan pengembangan, tetapi juga untuk secara aktif menyebarkan aplikasi dan aset mereka untuk menguji dan memproduksi server. Dalam peran ini, kemampuan Git untuk secara efisien menentukan "file apa yang berubah?" sama pentingnya dengan kemampuannya yang lebih terperinci untuk menentukan "apa yang berubah dalam setiap file?" Jika Git harus melakukan salinan file yang hampir penuh untuk aset yang diperkecil / dioptimalkan, itu membutuhkan waktu sedikit lebih lama daripada yang seharusnya, tetapi bukan masalah besar karena masih melakukan pekerjaan yang sangat baik membantu menghindari salinan "setiap file dalam proyek" pada masing-masing menyebarkan siklus.
Jika Anda menggunakan Git sebagai mesin penyebaran, menyimpan aset yang diperkecil / dioptimalkan di Git dapat beralih dari "tidak!" untuk diinginkan. Memang, mungkin diperlukan, katakanlah jika Anda tidak memiliki peluang membangun / pasca-pemrosesan yang kuat pada server / layanan yang Anda gunakan. (Bagaimana mengelompokkan pengembangan dan penyebaran aset dalam kasus itu adalah kaleng cacing yang terpisah. Untuk saat ini, cukup untuk mengetahui bahwa dapat dikelola beberapa cara, termasuk dengan satu repositori terpadu, beberapa cabang, subrepositori, atau bahkan beberapa repositori yang tumpang tindih. )
/dev/null
.