es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La orden git diff muestra diferencias incorrectas.

Estoy revisando algunos cambios en un repositorio con git. En varios archivos, git diff muestra el archivo completo como cambiado. Sin embargo, no se hicieron cambios. Aquí está la salida:


$ git diff classes/cache/index.php
diff --git a/classes/cache/index.php b/classes/cache/index.php
index a7d0f33f6..a0a30515d 100644
--- a/classes/cache/index.php
+++ b/classes/cache/index.php
@@ -1,35 +1,35 @@
<?php
/
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
+<?php
+/

+* 2007-2016 PrestaShop
+
+
NOTICE OF LICENSE
+*
+* This source file is subject to the Open Software License (OSL 3.0)
+* that is bundled with this package in the file LICENSE.txt.
+* It is also available through the world-wide-web at this URL:
+* http://opensource.org/licenses/osl-3.0.php
+* If you did not receive a copy of the license and are unable to
+* obtain it through the world-wide-web, please send an email
+* to license@prestashop.com so we can send you a copy immediately.

git diff muestra el archivo completo con el prefijo -, y luego nuevamente el mismo texto con +. ¿Qué podría causar que git diff se vea así? Tenga en cuenta que este repositorio fue sincronizado previamente con rsync (sin embargo, se mantuvieron los permisos).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Este problema podría ser causado por diferencias en los finales de línea entre las dos copias del archivo. Windows utiliza CRLF (retorno de carro + avance de línea) para los finales de línea, mientras que los sistemas basados en Unix utilizan solo LF (avance de línea). Si el archivo se copió de una máquina con Windows a una máquina basada en Unix utilizando rsync, los finales de línea podrían haberse convertido a LF pero Git aún puede detectar el archivo como si tuviera finales de línea CRLF. Esto daría como resultado todo el archivo apareciendo como modificado en git diff.

    Para solucionar esto, se puede intentar establecer core.autocrlf en input en la configuración de Git. Esto normalizará todos los finales de línea a LF al comprometerlos, pero los dejará intactos al comprobar los archivos. Se puede hacer esto mediante la siguiente línea de comando:

    git config --global core.autocrlf input
    

    Si esto aún no soluciona el problema, se puede intentar restablecer el archivo al compromiso original para asegurarse de que no haya cambios reales. Se puede hacer esto ejecutando:

    git checkout HEAD -- classes/cache/index.php
    

    Esto restablecerá el archivo a la versión más reciente comprometida del archivo. Si no se realizaron cambios en el archivo, git diff ya no debería mostrar que se ha modificado.

Comments are closed.