Apakah git bagus dengan file biner?
Jika saya memiliki banyak file terkompresi yang dimodifikasi, dan banyak file terkompresi tidak pernah (atau hampir tidak pernah) diubah, apakah git akan menanganinya dengan baik? Misalnya, jika saya menyisipkan atau menghapus bagian tengah dan menyisipkan data di dekat bagian akhir, ia akan menyadarinya seperti halnya dengan teks?
Jika git tidak cocok dengan file biner, alat apa yang dapat saya pertimbangkan?
Jawaban:
Di luar kotak, git dapat dengan mudah menambahkan file biner ke indeksnya, dan juga menyimpannya dengan cara yang efisien kecuali jika Anda sering melakukan pembaruan pada file besar yang tidak dapat dikompresi.
Masalahnya dimulai ketika git perlu menghasilkan diff dan merge: git tidak dapat menghasilkan diff yang berarti, atau menggabungkan file biner dengan cara apa pun yang masuk akal. Jadi semua gabungan, rebases atau cherrypicks yang melibatkan perubahan ke file biner akan melibatkan Anda membuat resolusi konflik manual pada file biner itu.
Anda perlu memutuskan apakah perubahan file biner cukup langka sehingga Anda dapat hidup dengan pekerjaan manual tambahan yang mereka sebabkan dalam alur kerja git normal yang melibatkan penggabungan, rebas, cherrypicks.
sumber
git diff --binary
akan dapat menambal file biner.Selain jawaban lainnya.
Anda dapat mengirim diff ke file biner menggunakan apa yang disebut format binary diff . Ini tidak dapat dibaca manusia, dan hanya dapat diterapkan jika Anda memiliki preimage yang tepat dalam repositori Anda, yaitu tanpa fuzz.
Sebuah contoh:
Anda dapat menggunakan textconv gitattribute untuk
git diff
menunjukkan diff yang dapat dibaca manusia untuk file biner, atau bagian dari file biner. Misalnya untuk file * .jpg bisa jadi perbedaan informasi EXIF, untuk file PDF bisa jadi perbedaan representasi teksnya (pdf2text atau semacamnya).HTH.
sumber
Jika Anda memiliki file biner yang sangat besar, Anda dapat menggunakan git-annex untuk menyimpan data di luar repositori. Lihat: http://git-annex.branchable.com/
sumber
Saya tidak tahu alat apa pun yang mencoba menyimpan diff file biner untuk kontrol versi, tetapi perlu dicatat bahwa Git tidak melakukan ini bahkan untuk file teks. Git menyimpan file sebagai blob, dan Git melakukan perbedaan di antara file-file tersebut jika diperlukan.
Jika Anda ingin melakukan kontrol versi pada sesuatu seperti dokumen Photoshop / Illustrator, GridIron Flow mungkin bisa membantu Anda. Jika Anda mencoba untuk membuatnya tetap sinkron antar mesin, Dropbox atau Rsync dapat menanganinya, tetapi mereka tidak akan melakukan diff cerdas.
sumber
git gc
untuk melakukan pengumpulan sampah. Dari halaman yang sama: "Karena Git menyimpan setiap versi dari setiap file sebagai objek terpisah, ini bisa menjadi sangat tidak efisien. Bayangkan memiliki file yang panjangnya beberapa ribu baris dan mengubah satu baris. Git akan menyimpan file kedua secara keseluruhan, yang mana adalah pemborosan besar ruang. "git gc
: "Pengguna didorong untuk menjalankan tugas ini secara teratur dalam setiap repositori untuk mempertahankan pemanfaatan ruang disk yang baik dan kinerja operasi yang baik. Beberapa perintah git dapat secara otomatis menjalankan git gc; lihat tanda --auto di bawah untuk detailnya . "Yah, git bagus dengan binari. Tapi itu tidak akan menangani binari seperti file teks. Ini seperti Anda ingin menggabungkan file biner. Maksud saya, perbedaan di jpeg tidak akan pernah mengembalikan apa pun kepada Anda. Git bekerja sangat baik dengan file teks dan mungkin seburuk solusi lainnya dengan file biner!
sumber
jika Anda menginginkan solusi untuk pembuatan versi, Anda mungkin ingin mempertimbangkan git-lfs yang memiliki penunjuk ringan ke file Anda.
itu berarti ketika Anda mengkloning repo Anda, itu tidak mengunduh semua versi tetapi hanya yang diperiksa.
Berikut tutorial bagus tentang cara menggunakannya
sumber