¿Por qué Git escribe en mis files?

Tengo algunos files fuente en un repository de Git, main.c y algunos otros. Yo uso Vim para editar estos files.

Digamos que estoy editando main.c Hago un cambio, le digo a Vim que lo escriba, luego lo cambio a un terminal (sin matar a Vim) y lo comprometo / empuja. Si vuelvo a Vim con main.c y trato de escribir de nuevo, recibo esta advertencia:

 WARNING: The file has been changed since reading it!!! Do you really want to write to it (y/n)? 

¿Cómo modifica / modifica mis files fuente? ¿Por qué?

Podría ser un problema de permiso (git cambiando el bit ejecutable del file).
Inténtalo de nuevo después de que git config core.filemode false .

La solución es simple: vuelva a abrir el file con :e filename .
O bien (si sus files están guardados y no tienen ninguna modificación actual), ejecute :bufdo e , que hará que Vim vuelva a abrir cada buffer.

¿Puede mostrarnos su file .gitattributes? ¿Estás diciéndole que cambie los finales de línea?

¿Por qué no tratas de hacer una diferencia y mostrándonos cuáles son las diferencias?

Las otras respuestas han demostrado que la escritura puede deberse a que Git realiza un cambio de final de línea o expande los attributes configurados. Una solución simple es

 :set autoread 

en Vim, para actualizar automáticamente el file (siempre que no lo hayas cambiado, lo que según tu caso de uso parece poco probable).

 'autoread' 'ar' boolean (default off) When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again.