Untuk tim terdistribusi yang menggunakan Git dan Github sebagai kontrol versi, haruskah gambar juga disimpan dalam repositori git?
Sebagian besar, gambar tidak akan berubah. Folder yang berisi mereka hanya akan bertambah besar seiring gambar ditambahkan. Kekhawatiran adalah bahwa folder gambar dapat tumbuh ke ukuran besar dari waktu ke waktu oleh kombinasi gambar besar, atau hanya banyak dari mereka.
Apakah ini dianggap praktik terbaik? Apa alternatif lain yang ada untuk berbagi file biner yang diperlukan dalam proyek-proyek yang dengan mudah diakses oleh tim terdistribusi?
version-control
git
github
sepon
sumber
sumber
Jawaban:
Apakah gambar Anda asli atau dapatkah dipulihkan (dijamin?) Dari tempat lain? Apakah mereka perlu mengirimkan unit perangkat lunak yang dibangun dari sumber? Jika mereka asli, mereka perlu membuat cadangan. Tempatkan mereka di kontrol revisi Anda, jika mereka tidak pernah berubah, penalti ruang sama dengan cadangan, dan mereka di mana Anda membutuhkannya.
Bisakah mereka diedit untuk mengubah tampilan perangkat lunak, secara tidak sengaja atau sengaja? Ya - maka mereka HARUS direvisi terkontrol entah bagaimana, mengapa menggunakan cara lain ketika Anda sudah memiliki solusi yang sempurna. Mengapa memperkenalkan kontrol versi "salin dan ganti nama" dari zaman kegelapan?
Saya telah melihat karya seni asli seluruh proyek menjadi "poof" ketika hard drive desainer grafis MacBook meninggal, semua karena seseorang, dengan kebijaksanaan yang tak terbatas, memutuskan bahwa "biner tidak termasuk dalam kontrol putaran", dan desainer grafis (setidaknya yang ini ) cenderung tidak baik dengan cadangan.
Hal yang sama berlaku untuk semua dan semua file biner yang sesuai dengan kriteria di atas.
Satu-satunya alasan untuk tidak melakukannya adalah ruang disk. Saya takut $ 100 / terabyte, alasan itu agak tipis.
sumber
Kenapa tidak? :)
Menyimpan binari dianggap praktik buruk, ya, tapi saya tidak pernah terlalu khawatir tentang gambar.
Kasus terburuk, jika Anda memiliki banyak, simpan di tempat lain atau gunakan eksternal atau ekstensi untuk dukungan biner. Dan jika gambarnya tidak sering diubah, lalu di mana masalahnya? Anda tidak akan mendapatkan delta besar yang gemuk. Dan jika mereka dihapus dari waktu ke waktu, itu hanya server Anda yang sedikit menderita menyimpan sejarah, tetapi klien tidak akan melihat apa-apa.
Menurut pendapat saya, Anda tidak perlu khawatir tentang hal itu - asalkan Anda tidak menyimpan GB dari mereka.
Yang bisa Anda lakukan adalah menyimpan gambar "sumber": SVG, makro LaTeX, dll ... dan dapatkan gambar akhir yang dihasilkan oleh sistem build Anda. Itu mungkin lebih baik, jika Anda bisa. Jika tidak, maka jangan repot-repot.
(Semua yang dikatakan, Git bersinar untuk file teks, tetapi bukan VCS terbaik untuk gambar. Beri kami lebih banyak konteks dan metrik jika Anda bisa)
Untuk informasi tambahan, Anda mungkin ingin melihat Q & As ini:
sumber
Pertanyaan ini cukup lama tetapi ini adalah pertanyaan umum yang muncul ketika berhadapan dengan Git dan ada beberapa kemajuan pada solusi modern untuk menyimpan file besar dalam repo Git sejak jawaban terakhir.
Untuk menyimpan file besar di Git ada proyek-proyek berikut:
TLDR: jika Anda bisa, gunakan git-lfs untuk menyimpan gambar atau file biner lainnya di git.
sumber
Seluruh "jangan simpan binari dalam kontrol sumber" ditetapkan untuk alasan tertentu: Jika Anda memiliki kode sumber yang mengkompilasi, jangan menyimpan kompilasi yang sebenarnya, tetapi hanya kode sumber. Gambar dan aset visual tidak memiliki "sumber," sehingga harus dilacak dalam kontrol versi.
sumber
Saya percaya cara yang disarankan dengan Git adalah dengan menggunakan sub-modul (diperkenalkan pada Git 1.5.3) yang pada dasarnya adalah repositori terpisah yang dikaitkan dengan yang utama. Anda menyimpan gambar Anda (dan aset biner lainnya) dalam sub-modul. Ini kemudian dapat check-out dengan repositori utama atau kiri, tergantung pada apa yang diperlukan.
Dari http://book.git-scm.com/5_submodules.html
Juga, ukuran seharusnya tidak menjadi masalah yang signifikan jika gambar tidak sering berubah. Anda juga dapat menjalankan perintah untuk memangkas / mengurangi ukuran, seperti:
sumber
Ya .
Katakanlah Anda merilis perangkat lunak versi 1.0. Untuk versi 2.0 Anda memutuskan untuk mengulang semua gambar menjadi bayangan. Jadi Anda melakukan ini, dan lepaskan 2.0. Kemudian beberapa pelanggan yang menggunakan 1.0 dan tidak dapat memutakhirkan ke 2.0 memutuskan mereka ingin program dalam bahasa lain. Mereka memberi Anda $ 1G untuk melakukannya, jadi Anda mengatakan yakin. Namun dalam budaya yang berbeda, beberapa foto Anda tidak masuk akal, jadi Anda harus mengubahnya ...
Jika Anda ingin menyimpan gambar Anda di kontrol sumber, ini mudah, berdasarkan 1.0 Anda membuat perubahan pada gambar (antara lain), build, release. Jika Anda tidak memiliki ini dalam kontrol sumber, Anda akan memiliki waktu yang jauh lebih sulit, karena Anda harus menemukan gambar-gambar lama, mengubahnya, dan kemudian membangun.
sumber
Jika itu adalah bagian dari Proyek, itu harus di VCS . Cara mencapai yang terbaik ini mungkin bergantung pada VCS, atau bagaimana Anda mengatur Proyek. Mungkin repo untuk para desainer, dan hanya hasil dalam repo coder, atau hanya 'Sumber gambar' (saya pernah punya proyek dengan hanya file .svg, dan gambar di mana dihasilkan melalui make / inscape cli).
Tapi, jika VCS tidak bisa menangani itu, atau menjadi tidak dapat digunakan, saya akan mengatakan, bahwa itu bukan alat yang tepat untuk pekerjaan Anda.
Sejauh ini, saya tidak punya masalah dengan menempatkan jumlah grafik 'biasa' (maket, konsep, dan grafik halaman) untuk proyek web di git.
sumber
Jika Anda menyimpan gambar Anda di SCM: ya. Tanpa keraguan.
Jika Anda menyimpan gambar Anda di git: ini menjadi lebih rumit.
git sangat baik dengan file teks, tetapi pada dasarnya tidak terlalu panas dengan binari. Anda akan memiliki masalah dengan ukuran data yang ditransfer ketika Anda mengkloning atau mendorong, direktori .git Anda akan tumbuh, dan Anda bisa mendapatkan kekacauan yang tepat dengan penggabungan (yaitu bagaimana Anda menggabungkan 2 gambar!)
Satu jawaban adalah dengan menggunakan submodul, karena ini berarti hubungan antara proyek Anda dan gambar akan lebih lemah - jadi Anda tidak perlu mengelola gambar seolah-olah mereka adalah bagian dari sumber Anda, namun tetap membuat mereka terkontrol, dan tidak memiliki khawatir dengan percabangan mereka - dengan asumsi proyek hanya repositori data 'datar' yang tidak melalui churn yang sama selama proses pengembangan biasa.
Jawaban lainnya adalah menempatkan mereka di proyek yang berbeda, tidak pernah melakukan percabangan, dan memastikan bahwa setiap orang yang berkomitmen untuk proyek itu mendorongnya segera - jangan pernah membiarkan 2 orang mengubah versi file yang sama - Anda akan menemukan ini yang paling sulit Aspek seperti git tidak dirancang untuk alur kerja yang tidak terdistribusi. Anda harus menggunakan metode komunikasi kuno untuk mengikuti aturan ini.
Jawaban ketiga adalah menempatkan mereka dalam SCM yang sama sekali berbeda yang lebih baik diarahkan untuk bekerja dengan gambar.
sumber
Menambah jawaban @ haylem, perhatikan bahwa ukuran memainkan faktor besar dalam hal ini. Bergantung pada VCS, itu mungkin tidak bekerja dengan baik dengan banyak gambar. Ketika klon atau dorongan besar mulai mengambil sepanjang malam maka itu sudah sangat terlambat karena semua gambar sudah ada di repositori Anda.
Rencanakan gambar besar dan pertumbuhan di masa depan. Anda tidak ingin mendapatkan dua tahun ke dalam proyek ini dan memiliki "oh sial, mungkin repo itu agak terlalu besar."
sumber
Saya setuju bahwa menyimpannya secara teknis dan ekonomis adalah layak. Pertanyaan yang saya inginkan adalah "apakah gambar-gambar ini bagian dari produk pengiriman atau bagian dari konten produk pengiriman?" Bukan berarti Anda tidak dapat menyimpan konten di GIT (atau VCS lainnya) tetapi itu merupakan masalah terpisah untuk VCS terpisah.
sumber