Optimalkan repo git, berisi file biner besar

21

Proyek kami sekitar 11GB, 10 di antaranya adalah data biner (gambar .png). Akibatnya, a git diffatau git statusoperasi memakan waktu lebih dari satu menit. Untungnya semua file data dipisahkan menjadi folder dengan nama indah data. Tugasnya adalah "Hindari mengompresi, membedakan, dan operasi mahal lainnya pada file biner."

  • Itu dianggap memecah proyek menjadi dua repo. Maka dataakan menjadi repo eksternal, yang diperiksa oleh repo kode sumber utama. Diputuskan bahwa overhead dari menjaga repo dalam sinkronisasi akan terlalu banyak, terutama untuk para seniman, yang bekerja dengan file data.

  • Secara eksplisit mengatakan bahwa file-file itu biner , tidak termasuk file dari diff dianggap, tetapi mereka sepertinya hanya sebagian solusi untuk pertanyaan itu.

Saya merasa bahwa atribut git adalah solusinya, tetapi bagaimana caranya? Atau adakah arsitektur yang lebih baik daripada repo monolitik?

Vorac
sumber
1
Pertanyaan besar pertama di sini adalah seberapa pentingkah file data tersebut. Apakah program Anda membutuhkan semua gambar yang tersedia untuk melakukan sesuatu yang bermanfaat, atau dapatkah ia lolos dengan subset kecil selama pengembangan / pengujian yang khas?
Ixrec
@ Isrec, gambar sebenarnya lebih penting daripada kode sumber. Semuanya harus ada, dan checksum .png diperiksa selalu untuk file yang rusak.
Vorac
1
Mengapa pertanyaan ini bukan tentang stack overflow? Q. Sepertinya cocok untuk itu.
spirc
@ lingkari pertanyaan ini berada di antara "bantuan dengan perangkat lunak" yang ada di topik di SO, dan "strategi kontrol versi" yang ada di topik di sini. Karena ia tidak meminta perintah git untuk melakukan sesuatu, itu tidak jelas di sisi SO dari garis jadi saya memilih untuk membiarkannya terbuka di sini.
@Snowman terima kasih atas jawabannya. Item daftar topik apa yang cocok? programmers.stackexchange.com/help/on-topic
spirc

Jawaban:

18

Anda dapat menggunakan git-lfs atau alat serupa (git-fat, git-annex, dll.). Alat-alat itu pada dasarnya mengganti file biner dalam repo Anda dengan file teks kecil dengan hash, dan menyimpan data biner yang sebenarnya dengan cara non-git - seperti berbagi jaringan.

Membuat diffs dan semuanya superfast karena hash hanya bisa dibandingkan, dan - setidaknya untuk git-lfs - transparan untuk pengguna (setelah menginstal sekali).

Afaik git-lfs didukung oleh github, gitlab, VisualStudio, dan open source.

kat0r
sumber
2
Sudahkah Anda mencoba menggunakan git-lfspada proyek dengan banyak gigabita aset dengan tim pengembang / artis campuran? Saya tertarik untuk mengetahui apakah orang menggunakan git-lfs untuk proyek seperti game dan animasi. Sejak itu masih terbilang baru pada saat penulisan. Dari pengalaman saya sendiri, hambatan masuk ke git untuk pengguna yang kurang teknis sudah sangat tinggi, sehingga memiliki lapisan tambahan untuk manajemen file di atasnya - mungkin sulit bagi orang untuk menggunakannya kecuali mereka sudah nyaman dengan git.
ideasman42
Hanya untuk sekitar ~ 1GB data, maaf. Tapi git-lfs seharusnya tidak menambahkan langkah-langkah tambahan untuk pengguna akhir, itu harus sepenuhnya transparan.
kat0r
Ini sepertinya jawaban yang benar, jika beberapa masalah muncul selama integrasi saya akan melaporkan kembali ke sini. Jadi prosedur instalasi perlu diselesaikan hanya sekali di server, dan tidak di setiap mesin klien?
Vorac
Afaik Anda perlu menginstal addin klien kecil, juga, periksa halaman github. Tapi itu harus mudah diluncurkan dengan kebijakan grup / lebih sederhana daripada alternatif apa pun.
kat0r
1

Gunakan kedua repositori GIT & SVN

Jika file biner dapat dipisahkan secara logis dari sumbernya, Anda dapat mempertimbangkan menggunakan git untuk file teks, dan non DVCS seperti subversi untuk file biner.

Sebuah proyek yang saya kerjakan melakukan ini karena kami memiliki banyak GB untuk pustaka yang dikompilasi per (untuk dependensi OSX / Win32), yang kami perlukan untuk tetap versi.


Di sisi lain jika Anda memiliki pengguna non-teknis, menggunakan dua sistem kontrol versi mungkin bermasalah. Namun jika para artis tidak mengerjakan kode Anda bisa menyediakan skrip untuk melakukan pembaruan, dan mereka dapat menggunakan subversi untuk melakukan aset biner.

Gunakan SVN (dengan git svn)

Meskipun pertukaran ini tidak selalu baik untuk pengembang yang terbiasa menggunakan git biasa, Anda bisa menggunakan SVN untuk repositori utama, dan pengembang dapat menggunakan git svnalat.

Ini membuatnya sedikit lebih berfungsi untuk pengembang yang menggunakan git, tetapi berarti untuk semua orang yang tidak terbiasa dengan DVCS (atau VCS secara umum) - mereka dapat menggunakan model sederhana SVN tanpa harus menggunakan beberapa sistem kontrol versi yang kompleks.


git-lfs juga merupakan pilihan, tapi saya tidak menggunakannya jadi tidak bisa bicara seberapa bagus kerjanya.

gagasanman42
sumber