Migración de un Proyecto PHP de Windows a Git y Aplicación de Actualizaciones / Parches OSX

Tengo un proyecto PHP basado en Windows (CRLF Newlines) que no estaba en ningún tipo de control de versión. Recientemente puse ese proyecto en Git en mi máquina OSX. Otro desarrollador realizó cambios en la fuente (en una máquina separada) mientras no estaba en Git y ahora tengo que fusionar esos cambios en el repository.

Mi plan original era usar diff / patch para sincronizar todo. El problema con esto es que hizo sus actualizaciones en OSX, así que tengo que convertir las nuevas líneas para hacer que diff / patch funcione.

¿Hay alguna manera de hacer que diff funcione con las nuevas líneas CRLF? Por lo que he leído, primero debes hacer la conversión a LF antes de aplicar diff.

De lo contrario, ¿tengo que examinar recursivamente todos los files y hacer la conversión de nueva línea?

¿Voy a actualizar este repository de la manera adecuada?

Al crear el parche, debe poder decirle a la herramienta que utiliza que ignore los cambios de EOL o los cambios en el espacio en blanco. Además git apply y git am tengo algunas opciones con respecto a cómo manejan el espacio en blanco, pero no los he usado así que no estoy seguro de cómo manejan los diffs con espacios en blanco adicionales y cambios de EOL.

En mi humilde opinión, la verdadera solución es corregir todos los CRLF en su repository a LF porque git funciona mejor si todo usa terminaciones de línea LF en el repository. Si es necesario, hay opciones para que los finales de línea cambien a CRLF en el process de pago mientras se sigue utilizando LF internamente.

¡Dulce!

Primero necesitaba deshacerme de todos los CRLF. Maté a mi repository completo de git con rm -rf .git/ . Luego seguí vagamente GitHub's Dealing with Line Endings, que es de este Q y A de stackoverflow.

 # switch on the conversion of line endings on commit $ git config --global core.autocrlf input # Initialize $ git init $ git add . $ git commit -m "First Import" # If you're doing this on a Unix/Mac OSX clone then optionally remove # the working tree and re-check everything out with the correct line endings. $ git ls-files -z | xargs -0 rm $ git checkout . 

Luego ejecuté diff y patch contra las carpetas apropiadas y ejecuté el commit final. ¡Todo está sincronizado!

    Intereting Posts