¿Cómo establecer la línea pnetworkingeterminada del sistema que finaliza en modo CRLF para git en Cygwin?

¿Hay alguna manera de establecer el modo de final de línea pnetworkingeterminado diferente del pnetworkingeterminado del sistema (Cygwin) para git?

Uso tanto Windos-Git (es decir, GitBash) como el git nativo de Cygwin. La causa principal de mi problema es que CYGWIN se considera un * x, y por lo tanto el final de línea pnetworkingeterminado se establece en LF. Sin embargo, CYGWIN se ejecuta en Windows, y la mayoría de los demás software cooperado, incluido GitBash, desea que el modo de final de línea sea CRLF.

Utilizo ambos porque administro la database de git, y necesito asegurar la usabilidad de diferentes herramientas / clientes de git para diferentes ingenieros.

En Cygwin, cuando configuro core.crlf como verdadero, no convertirá el file de text a CR / LF para mí, ya que Cygwin se considera un * x.

¿Hay alguna configuration en GIT que le diga a git que obligue a git a usar CR / LF ya que es la configuration pnetworkingeterminada de conversión 'automática'? -O- ¿Alguna solución para esta situación?

Después de largos experimentos con la confusión de otras causas (incluido el problema de bits de ejecución de files, del cual pensé erróneamente que era un problema de terminación de línea), finalmente obtuve la misma conclusión que la respuesta de VonC. Sin embargo, aquí publicaré una configuration y explicaciones más completas:

Antes que nada, les pediré a los ingenieros que agreguen las siguientes líneas en su ~/gitconfig , en la sección [core]:

 [core] filemode = false autocrlf = false 

Esto soluciona el problema del modo de ejecución de files (opción de modo de file) y fuerza a git a no realizar automáticamente la traducción autocrlf (opción autocrlf ).

En segundo lugar, para Windows, podremos usar opcionalmente esta opción.

 [core] eol = crlf 

Esto le dice a git que traduzca el file marcado como 'text' en .gitattributes a la terminación de línea CR / LF, si el modo de terminación de línea no está especificado en .gitattributes . Tenga en count que esta opción solo la utiliza git cuando autocrlf = false en el file .gitconfig .

Dejamos que los ingenieros decidan usar eol = crlf o incluso eol = lf , ya que saben qué modo de fin de línea les gusta.

Por último, para los .gitattributes de .gitattributes del proyecto, primero clasificamos nuestros files de text en tres grupos: (A) files de text que deben tener terminaciones de línea CR / LF, (B) files de text generados por la herramienta / cadena de herramientas (como files .xml), que no los editaremos por editores de text, (C) files de text que están bien para usar modos de terminación de línea (como files .cpp, .c, .h). Luego configuramos nuestros .gitattributes siguiente manera:

 *.<extension-for-groupA> text eol=crlf *.<extension-for-groupB> binary *.<extension-for-groupC> text 

La tercera línea es esencial. Si el file no está marcado como 'text', git tratará las diferentes terminaciones de línea como una diferencia para un file en git status .

La segunda línea no tiene ningún efecto si el .gitconfig del usuario tiene autocrlf = false . Sin embargo, para mayor security, agregamos esta línea.

Un entorno interesante es:

 *.sh binary 

Para muchos scripts de shell normales, use *.sh text eol=lf debería estar bien. Sin embargo, esos scripts de shell con caracteres especiales CR / LF en línea podrían estar dañados.


== ACTUALIZACIÓN ==

Olvidé decirlo, aún necesitamos agregar / cambiar fileMode = false en la sección [core] para el repository remoto y / o el repository local. Esto es esencial. La configuration del repository local anula la configuration de .gitconfig usuarios.

Para ser claros, el documento de gitattributes y " Tratando con finales de línea " recomiendan:

 *.<yourExtension> text eol=crlf 

No hay " core.crlf "

 text eol=crlf 

Git siempre convertirá las terminaciones de línea en CRLF al momento del pago. Debe usar esto para los files que deben mantener las terminaciones CRLF, incluso en OSX o Linux.