2010-10-15 13 views
20

He utilizado un script de perl para modificar todos los caracteres de tabulación en un repositorio de php git y los he cambiado a 4 espacios.Compromiso de Git que no anula a los autores originales en culpa de git

$ find -iname \*.php -exec perl -pi -e "s/\t/ /g" {} \ 

Puedo comprometerme con este cambio git commit, pero me marcará como el autor de todas líneas cambiadas dentro git blame después de esta confirmación se hace.

¿Hay alguna manera de cometer este cambio masivo que no me marca como el autor de las líneas modificadas, pero conserva el autor original? Es mucha historia que realmente no queremos perder en nuestro proyecto.

Nuestro propósito en el reemplazo de pestañas con 4 espacios no es hacer que las cosas parezcan diferentes en git blame, sino seguir los estándares de codificación PEAR adecuados. P.ej. sin pestañas, use 4 espacios para sangría.

+1

Quizás el comando de culpa admite una opción para ignorar los cambios de espacio en blanco. – CodesInChaos

+2

@CodeInChaos: yes, '-w' http://www.kernel.org/pub/software/scm/git/docs/git-blame.html. Haga de esto una respuesta –

Respuesta

16

Gracias a wnoise en git: change styling (whitespace) without changing ownership/blame?, se me ocurrió esto para ejecutar un filtro arbitrario en la historia de Git, por lo que usar esto podría reescribir la historia para hacer que parezca ofender a los espacios en blanco u otros temas nunca fueron cometidos, dejando el original autores en el tacto, pero su código se limpió: git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD

+2

Hermoso git branch-filter - filter-filter 'git diff-tree --name-only --diff-filter = AM -r --no-commit-id $ GIT_COMMIT | encuentre -iname \ *. php -exec perl -pi -e "s/\ t// g" {} \; ' HEAD – nookni

+0

@nookni: ¿eso significa que finalmente usaste esta respuesta? entonces deberías verificar esta como la respuesta aceptada –

35

No es responsabilidad del cometer comando para decidir cómo tratar los espacios en blanco, pero la responsabilidad del comando culpa porque es culpa que analiza las diferencias entre las versiones para obtener el autor de cada línea. Así que la búsqueda de una opción para ignorar los espacios en blanco en culpa:

La opción -w se define como: "Ignorar espacios en blanco al comparar la versión de los padres y el niño de encontrar dónde las líneas de procedencia." http://kernel.org/pub/software/scm/git/docs/git-blame.html

+1

Estamos tratando de seguir los buenos estándares de codificación PEAR, que insisten en 4 espacios para la sangría en lugar de caracteres de tabulación. Esto hace las cosas mucho más agradables para la unificación a través de las implementaciones de OS/IDE también ... – nookni

+9

Creo que malinterpretaste mi respuesta. Estoy diciendo que debes culpar de ignorar los cambios en el espacio en blanco (y por lo tanto, indirectamente, cometer), en lugar de tratar de marcar explícitamente el compromiso para que no aparezca en * culpa *. – CodesInChaos

+3

Sí, por desgracia, tu respuesta solo funciona donde se usa realmente la bandera '-w'. En IDEs y herramientas basadas en web (Github, etc.) no lo es. – Timmmm

Cuestiones relacionadas