2012-04-19 17 views
6

Muchas veces, me gusta modificar algunas líneas de código para facilitar la depuración, pero en realidad no quiero comprometerlas. Por ejemplo, inhabilitaré algunas características molestas (como los anuncios) al comentar algunas líneas de código, o estableceré los niveles de registro y los filtros únicamente a los que me interesan, o forzaré que un condicional sea verdadero así que el bloque de código que quiero ejecutar en realidad se ejecuta todo el tiempo.Git: ¿Cómo evitar el commit de archivos que fueron modificados solo para propósitos de depuración?

En Perforce, hubiera creado una "lista de cambios" para estos archivos y la hubiera etiquetado como "¡NO COMPROMETER!". ¿Cuál sería el equivalente de esto en Git? Una rama no funciona porque estas modificaciones solo de depuración deben existir con otros cambios que estoy realizando actualmente.

Respuesta

0

Gracias a todos por las respuestas. Lo que terminé haciendo fue escribir un gancho de precompromiso en git que busca la cadena "no cometer" (y otras variaciones) en cada uno de los archivos. Si lo hace, entonces la confirmación falla, y tendré que editar esas líneas antes de comprometerme. Esto se debe a que el código de depuración se debe tratar por línea, no por archivo, porque algunos archivos tienen cambios de depuración y cambios reales que se deben comprometer. (mi solución anterior con forzosamente no solucionó este problema).

5

Busque la opción --assume-unchanged. Hay un artículo de blog about this que explica las cosas bastante bien. Y también this one que menciona encontrar dichos archivos ignorados más adelante.

+0

el segundo enlace tiene una explicación agradable y fácil –

1

Lo que suelo hacer es simplemente poner el código de depuración en su propia confirmación y revertir ese compromiso más tarde. Una solución más complicada es hacer una rama intermedia fuera de master, llámelo debug. Realice todos los cambios de depuración en la rama debug, luego desmarque su función de debug. Cuando esté listo para eliminar los cambios de depuración, simplemente vuelva a establecer la base de la rama de características en master.

0

En realidad, no desea ignorar esos archivos, pero ignore esos cambios.

veo dos soluciones aquí:

  1. Restaurar CABEZA

El comando que estoy usando para tal situación es:

git checkout -- file ... 

Con todos los archivos que se modifican para la depuración propósito.

Esto restaura el archivo a partir del HEAD. Luego puede hacer con seguridad su git commit -a o lo que sea.

    git
  1. Tell a pedir que lo cambia a cometer (por archivo)

    git add -p.

Ver #1085162.

Pero aún tendrá que eliminar su código de depuración.

0

Una de las soluciones que no es universal pero que puede adaptarse a algunos escenarios de flujo de trabajo es aplicar los filtros de precompilación de Git (manual, manual + samples).En resumen, es solo una herramienta de preprocesamiento que se llamaría sobre todos los archivos confirmados antes de la confirmación real. Podría tener este mecanismo para eliminar ciertos patrones como //<NOCOMMIT ... //NOCOMMIT> o lo que quiera. El inconveniente es que estas líneas de depuración pueden desaparecer al restablecer a un compromiso o incluso tirar/fusionar (no lo compruebo).

Cuestiones relacionadas