Bagaimana cara membuat Git memperlakukan file sebagai biner?

104

Memiliki masalah dengan proyek berukuran sedang di mana file proyek studio visual terus mengalami masalah karena git memperlakukannya sebagai teks dan penggabungan. Saya hanya ingin mengatur file sebagai biner sehingga git tidak akan pernah menggabungkan file ini secara otomatis.

Apakah ada cara untuk melakukan ini?

Charles Randall
sumber
2
Tetapi file proyek Visual Studio adalah file teks dan perlu digabungkan?
CB Bailey
1
@CharlesBailey Mereka secara berkala akan bergabung dengan cara yang paling buruk, mengacaukan semua bangunan Anda. Saya tidak ingin mengutak-atik XML, saya ingin meminta saya menambahkan file baru secara manual atau bahkan mungkin menjalankan alat bantu XML-diffing yang tahu cara menanganinya dengan benar.
michael.bartnett
1
@ michael.bartnett: Hanya jika Anda mengacaukan penggabungan, tentunya?
CB Bailey
1
@CharlesBailey Tentu saja jika saya menggabungkan secara manual itu tidak menjadi masalah. Tapi itu bukan sesuatu yang harus saya gabungkan secara manual. Biasanya ini adalah penambahan / penghapusan / edit item build ... yang sepenuhnya dapat digabung secara otomatis, tetapi tidak dengan metode diff per baris yang biasa. Lihat presentasi ini untuk mengetahui lebih lanjut tentang gagasan tersebut.
michael.bartnett
@ michael.bartnett: Kalau begitu, siapkan driver gabungan yang lebih baik. Poin yang saya buat (10 bulan yang lalu) adalah bahwa file proyek dapat dan harus digabungkan. Secara pribadi, saya lebih suka memperbaiki upaya mesin yang masuk akal daripada melakukannya sepenuhnya dengan tangan, yang sepertinya pekerjaan yang tidak perlu.
CB Bailey

Jawaban:

135

Ya, menggunakan atribut . Letakkan sesuatu seperti ini di .gitattributesfile Anda (buat jika tidak ada):

*.sln binary
*.suo binary
*.vcxproj binary

Ini binarysebenarnya adalah makro yang telah ditentukan sebelumnya , setara dengan -diff -merge -text.

Jika Anda ingin tetap dapat melihat perbedaannya, Anda dapat menggunakan:

*.sln -merge -text

Dengan cara ini, *.slnfile tidak akan digabungkan, tidak memiliki eol yang dinormalisasi, tetapi sementara itu dapat di-diff.

Michael Wild
sumber
1
dimana file ini?
neves
@neves Everywhere file gitignore dapat ditemukan, sesuai dokumentasi yang disediakan oleh tautan dalam jawaban yang diberikan.
Michael Wild
4
@neves: Anda harus membuatnya, baik secara lokal di repo Anda atau secara global seperti misalnya ~/.gitattributesdan kemudian menjalankan git config --global core.attributesfile ~/.gitattributeslihat stackoverflow.com/questions/28026767/…
jan-glx
Apa yang terjadi pada file ini jika tidak digabungkan secara otomatis? Apakah satu versi dipilih atau Anda harus menggabungkan secara manual?
ClydeTheGhost
1
@ClydeTheGhost Anda harus memilih satu.
Michael Wild
6

Anda harus menentukan atribut file biner di .gitattributesfile Anda (buatlah jika tidak ada) dengan meletakkan baris-baris ini di dalamnya, untuk mencegahnya menanganinya sebagai file diff teks:

# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.sln     -text diff
*.suo     -text diff
*.vcxproj -text diff
*.gif     -text diff
*.gz      -text diff
*.ico     -text diff
*.jpeg    -text diff   
Omar Alahmed
sumber