Git cant diff o merge file .cs en encoding utf-16

Un amigo y yo estábamos trabajando en el mismo file .cs al mismo time y cuando hay un conflicto de fusión, Git señala que hay un conflicto, pero el file no está cargado con el "HEAD" habitual ">>>" porque los files .cs eran files binarys Así que agregamos numerosas cosas (text * .cs, etc.) a nuestro file .gitattributes para hacer que git lo trate como un file de text que no funcionó.

Eso es cuando nos dimos count de que git podía diferir otros files .cs y simplemente no este. La razón de esto es porque está en encoding unicode ya que contiene algunos caracteres chinos.

Entonces, ¿cómo hacemos git diff o fusionar files que están en formatting utf-16 o utf-8?

Lo que ocurre es que si presiono, gitlab muestra exactamente qué es diferente. Así que no entiendo cómo git puede dif en el server pero no con bash.

Tuve un problema similar con los files * .rc para un proyecto de c ++ y encontré que la mejor manera de resolver esto es usar la mancha de git y limpiar los filters para almacenar todo en el repository como utf-8, y luego convertir a utf-16 al escribir al directory de trabajo.

De esta forma, todo lo que git hace, como diffs, merges o lo que sea que funcione en el text utf8 sin problema, pero su copy de trabajo tendrá utf16, lo que mantendrá feliz a visual studio.

Para configurar esto, asegúrese de estar utilizando una versión de git que tenga iconv disponible (las versiones más recientes de msysgit lo hacen) y agregue lo siguiente a su file ~ / .gitconfig:

[filter "utf16"] clean = iconv -f utf-16le -t utf-8 smudge = iconv -f utf-8 -t utf-16le requinetworking 

Luego, en su file .gitattributes, agregue:

 *.rc filter=utf16 resource.h filter=utf16 

Si ya tienes files existentes en utf16 almacenados como binarys, entonces debes eliminarlos del repository y volver a agregarlos.

 git rm --cached <names-of-utf16-files> git commit -am "removed utf16 files" git add <names-of-utf16-files> git commit -am "added utf16 files as utf8" 

Y ahora todo debería funcionar.