¿Cómo hago para que Git trate un archivo como binario?

104

Tener un problema con un proyecto de tamaño mediano donde los archivos de proyecto de Visual Studio siguen teniendo problemas debido a que git los trata como texto y se fusiona. Me gustaría configurar el archivo como binario para que git no combine automáticamente estos archivos nunca.

¿Hay alguna forma de hacer esto?

Charles Randall
fuente
2
¿Pero los archivos de proyecto de Visual Studio son archivos de texto y deben fusionarse?
CB Bailey
1
@CharlesBailey Se fusionarán periódicamente de la peor manera posible, arruinando todas tus construcciones. No quiero jugar con el XML, quiero que me pida que agregue manualmente nuevos archivos o posiblemente incluso ejecute una herramienta de diferenciación de XML que sepa cómo manejar eso correctamente.
michael.bartnett
1
@ michael.bartnett: ¿Solo si estropeas la fusión, seguro?
CB Bailey
1
@CharlesBailey Por supuesto, si estoy fusionando manualmente no es un problema. Pero eso no es algo que deba fusionar manualmente. Por lo general, es un elemento de compilación para agregar / eliminar / editar ... que es totalmente fusionable automáticamente, pero no por el método habitual de diferenciación por línea. Consulte esta presentación para obtener más información sobre la noción.
michael.bartnett
@ michael.bartnett: Entonces, configure un controlador de combinación mejor. El punto que estaba haciendo (hace 10 meses) era que los archivos del proyecto pueden y deben fusionarse. Personalmente, prefiero arreglar un intento de máquina razonable que hacerlo totalmente a mano, eso parece un trabajo innecesario.
CB Bailey

Respuestas:

135

Sí, usando atributos . Pon algo como esto en tu .gitattributesarchivo (créalo si no existe):

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

En binaryrealidad, aquí hay una macro predefinida , equivalente a -diff -merge -text.

Si aún desea poder ver la diferencia, puede usar:

*.sln -merge -text

De esta manera, los *.slnarchivos no se fusionarán, no se normalizarán eol, pero mientras tanto, se podrán diferenciar.

Michael Wild
fuente
1
donde esta este archivo?
neves
@neves Everywhere se puede ubicar un archivo gitignore, según la documentación proporcionada por el enlace en la respuesta dada.
Michael Wild
4
@neves: tienes que hacer uno, ya sea localmente en tu repositorio o globalmente, por ejemplo, ~/.gitattributesy luego ejecutarlo, git config --global core.attributesfile ~/.gitattributesconsulta stackoverflow.com/questions/28026767/…
jan-glx
¿Qué sucede con estos archivos si no se combinan automáticamente? ¿Se elige una versión o hay que fusionarla manualmente?
ClydeTheGhost
1
@ClydeTheGhost tendrás que elegir uno.
Michael Wild
6

Debe definir los atributos del archivo binario en su .gitattributesarchivo (créelo si no existe) colocando estas líneas en él, para evitar que lo maneje como un archivo de diferencia de texto:

# 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
fuente