2009-10-17 8 views
29

¿Qué le importa a VCS que estoy usando preocuparme por lo que puse en mis archivos? No entiendo cuál es el punto aquí. ¿Es el control de versión de git o el verificador de sintaxis?¿Por qué a Git le importan los espacios en blanco en mis archivos?

+0

Véase también http://stackoverflow.com/a/30803980/6309, para diferenciar entre la "vieja" error introducido por espacios en blanco anteriores confirmaciones, y nuevas, introducidas por el código provisional actual para la siguiente confirmación. – VonC

Respuesta

28

Es porque uno de los usos más comunes para Git es el envío de series de parches por correo electrónico. Los espacios finales causan problemas en el correo electrónico y, por lo tanto, generalmente se eliminan, lo que significa que cualquier espacio posterior se perderá en el proceso de envío del parche por correo electrónico y su aplicación. Esto a su vez significa que si hay espacios finales en las líneas del repositorio, pero no en el parche que se está aplicando, es posible que tenga conflictos espurios o cambios adicionales que no fueron intencionados al aplicar un parche.

Este enlace de precompilación solía estar habilitado de forma predeterminada, pero ya no es. Parece que he olvidado mi memoria; it was never deliberately enabled by default. Como han señalado otros, este ha sido siempre un gancho de precompromiso de muestra; solía estar deshabilitado al no darle el bit de ejecución, pero eso es algo que puede estropearse bastante fácilmente (por ejemplo, ejecutarse bajo Cygwin en Windows), por lo que en las versiones más nuevas de Git (desde over a year ago) las muestras han sido deshabilitadas por siendo nombrado pre-commit.sample. Puede eliminar o mover su .git/hooks/pre-commit para evitar que se ejecute este gancho si no le gusta el comportamiento. También debe actualizar su Git a algo más reciente, ya que esto se ha solucionado por bastante tiempo.

+0

Eso es estúpido, esto fue habilitado por defecto. Idiota realmente. –

+8

** NO ESTÁ HABILITADO POR DEFECTO **. – hobbs

+2

Mis disculpas; Me confundí con el hecho de que muchas veces me picaron, pero ahora me doy cuenta de que siempre estuvo bajo Cygwin. –

11

A Git no le importa para nada. El ejemplo gancho de precomisión realiza una comprobación de espacio en blanco como una demostración de cómo escribir un enlace, pero no está habilitado de forma predeterminada; tienes que hacerlo ejecutable para que haga cualquier cosa.

3

Como escribió hobbs, el gancho de precompilación de muestra puede estar haciendo una comprobación de espacios en blanco al final. Para desactivarlo, busque en .git/hooks y asegúrese de que los archivos no sean ejecutables.

Una posible forma de que los ganchos se hayan habilitado es que el bit ejecutable puede haberse configurado si movía su repositorio en una unidad flash con formato FAT.

+0

Es por eso que en las versiones más nuevas, los ganchos de muestra usan el sufijo '.sample' en lugar de no tener permisos ejecutables. –

4

¿Por qué? Debido a que los espacios en blanco al final se pierden fácilmente, lo que lleva a cambios espurios y parches no aplicados (debido al cambio de espacios en blanco). Es una cuestión de conformidad con el estilo de programación .

Dicho esto, es una cuestión de pre-commithook: puede editarlo, deshabilitarlo o configurar espacios finales en blanco (quizás solo para algunos tipos de archivos) para que no se considere un error.


pre-commit El gancho debe ser discapacitados por defecto, pero las versiones más antiguas (pre 1.6.0) que se utiliza para instalarlos apagados por tener permisos de ejecución desactivado, lo que podría no funcionar en la no -Los sistemas de archivos UNIX como FAT; desde 1.6.0 se instalan apagados (deshabilitados) al tener el sufijo '.sample' adjunto.

+1

Sí, bueno, no necesito un desarrollador de git que me diga lo que él o ella piensa que es un buen estilo de programación con el que tengo que conformarme. Si quiero algo como jslint, obtendré algo como jslint. No quiero que mi VCS lo haga, eso es estúpido. Si git tiene un problema con cambios espurios, y no parches aplicados, entonces ese es un problema con GIT, no mi código. –

+0

** NO ESTÁ ACTIVADO POR DEFECTO **. – hobbs

+0

@apphacker: los cheques utilizados por el gancho precompromiso predeterminado son * enviar parches por correo electrónico *, no tanto sobre el estilo de programación. –

0

No se trata de que VCS intente decirle qué es un buen estilo de programación. Es un asunto que los espacios en blanco al final son algo malo para ellos, porque el espacio en blanco al final puede verse como una modificación inútil por parte del VCS.

¿Cómo es eso?

Imagine que tiene una línea como esta:

puts "Hello World"^M^M^M 

Donde cada "^ M" es un espacio en blanco de salida (puesto allí para simplificar).

Otro desarrollador accidentalmente cambia esto como esto:

puts "Hello World"^M^M 

El VCS verá esto como un cambio. Una inútil que no interfiere con el código en absoluto, sino un cambio. Este tipo de cambio incluso puede ser señalado por el VCS como un conflicto (que es algo que debe evitarse siempre que sea posible). Además, contamina tu historia sin necesidad.

Cuestiones relacionadas