Git culpar sin historia

Cuando ejecuto git blame en un archivo (usando msysgit) siempre obtengo el siguiente tipo de impresión:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

es decir, muestra todas las líneas como Aún no comprometidas.

Probé esto en muchos archivos, que tienen muchas confirmaciones, siempre los mismos resultados. También intenté usar la ruta relativa / completa, pero parece que no hay diferencia.

Cuando trato de usar la culpa de TortoiseGit, siempre muestra que cada línea se comprometió por última vez en la primera confirmación:

texto alternativo

incluso aunque, como he dicho, hay decenas de confirmaciones en el historial de estos archivos ...

Ideas?

Editar - Más información

  • La culpa de Git funciona bien en GitHub, donde se aloja este repositorio.
  • También funciona bien si lo clono en una máquina Linux y hago la culpa allí
  • Parece que solo en msysgit esto no funciona

preguntado el 09 de enero de 11 a las 09:01

Para mí, este problema se debió al uso de una ruta de enlace simbólica opuesta a una ruta que el repositorio reconoció, por lo que pensó que el archivo era completamente nuevo. -

Nota: A partir de git 2.0.1 (25 de junio de 2014), git blame debería dejar de informar todas esas líneas "Aún no comprometidas". Ver mi respuesta a continuación -

En la lista de correo: git.661346.n2.nabble.com/… También ocurre en Linux. -

Esto también afecta a WSL, así que agregué la etiqueta. Espero que esté bien. -

4 Respuestas

git blame file.txt culpa a la versión de file.txt en su copia de trabajo. Si file.txt tiene Windows-newlines (CRLF) en el repositorio y tiene core.autocrlf = true, entonces cada línea de file.txt se considerará diferente y será reportada por git blame como aún no comprometido.

La razón por la cual git blame <my_branch> (o mejor git blame HEAD, que funciona independientemente de la rama en la que se encuentre) funciona, es que no culpa a la versión de la copia de trabajo, por lo que no hay posibilidad de que las líneas aún no se hayan confirmado.

Respondido el 11 de enero de 11 a las 15:01

git blame -w ignora el espacio en blanco, por lo que aún puede culpar a la copia de trabajo si lo desea - Kyle Heironimus

Git blame -w debería ser una respuesta separada y la aceptada;). La respuesta aceptada sin el comentario fue inútil para mí. - Guillaume Perrot

Encontré la solución, muy extraña.

Si ejecuto esto:

git blame file.txt

La historia está rota, como se publicó anteriormente.

Si hago esto en su lugar:

git blame my_branch file.txt

¡Funciona!

Esto es muy extraño, porque AFAICS el uso no requiere un nombre de rama:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file

Respondido el 09 de enero de 11 a las 13:01

Esto funciona para mí, gracias por publicarlo. Debe marcar este como la respuesta en mi opinión. - wes

Esto me funciona en msysgit pero el nombre del archivo distingue entre mayúsculas y minúsculas. Para que pueda escribir git blame mybranch cmakelists.txt y fallará; pero si escribo git blame mybranch CMakeLists.txt funcionará. - loops

Estoy de acuerdo, wes; La culpa no mostraba historial hasta que especifiqué la rama, y ​​eso es inconsistente con la documentación. - josephdpurcell

Dios mío, la culpa está tan rota. - Ciro Santilli 新疆 棉花 TRUMP BAN BAD

A partir de git 2.0.1 (25 de junio de 2014), git blame debería dejar de informar todas esas líneas "Aún no comprometido".

Vea cometer 4d4813a (26 abr 2014) por brian m. carlsonbk2204).
(Fusionada por Junio ​​C Hamano - gitster -- in cometer e934c67, 06 de junio de 2014)

blame: manejar archivos correctamente independientemente de autocrlf

Si un archivo contiene CRLF finales de línea en un repositorio con core.autocrlf=input, luego la culpa siempre marcaba las líneas como "Not Committed Yet", incluso si no se modificaron.
No intente convertir los finales de línea al crear la confirmación falsa para que la culpa funcione correctamente independientemente de la autocrlf ajuste.

Respondido el 20 de junio de 20 a las 12:06

Todavía tengo el problema en git v2.1.3 - DBedrenko

Tengo el problema con la versión 2.16.1.windows.1 de git - Radón8472

@ Radon8472 ¿Puede agregar una nueva pregunta que ilustre el problema, con su git config -l salida (y un enlace a esta respuesta): eso nos permitirá a mí y a otros intentar y ver si el problema persiste. - VonC

Otra posibilidad: error tipográfico de nombre de archivo que distingue entre mayúsculas y minúsculas

Tuve el mismo problema con git blame file.txt, luego me di cuenta de que había cometido un error tipográfico en el nombre de archivo que distingue entre mayúsculas y minúsculas con file.txt

Lo cambié a File.txt (por ejemplo), y obtuve los resultados esperados sin tener que especificar my_branch: git blame File.txt

Respondido 21 ago 11, 18:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.