Git blame no muestra historial


Cuando corro 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 Confirmadas.

Probé esto en muchos archivos, que tienen muchas confirmaciones - siempre los mismos resultados. También intenté usar el camino relativo / completo, pero parece no hacer ninguna diferencia.

Cuando intento usar la culpa de TortoiseGit, siempre muestra cada línea como la última cometida en la primera commit:

texto alt

Incluso pensó, como He dicho, en realidad hay decenas de confirmaciones en la historia de estos archivos..

Ideas?

Editar-Más información

  • Git blame funciona bien en GitHub, donde se aloja este repositorio.
  • También funciona bien si lo clono a una máquina linux y hago la culpa allí
  • Parece que solo en msysgit esto no funciona
Author: Assaf Lavie, 2011-01-09

4 answers

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

La razón por la que git blame <my_branch> (o mejor aún git blame HEAD, que funciona sin importar en qué rama estés) funciona, es que no culpa a la versión de la copia de trabajo, por lo que no hay potencial para que las líneas aún no se confirmen.

 124
Author: kusma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-11 12:29:08

Encontró la solución - muy raro.

Si corro 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 raro, porque AFAICS el uso no requiere un nombre de rama:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
 54
Author: Assaf Lavie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-09 10:04:41

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

Ver commit 4d4813a por brian m. carlson (bk2204) (Abril de 2014):

Culpa: manejar correctamente los archivos independientemente de autocrlf

Si un archivo contiene finales de línea CRLF en un repositorio con core.autocrlf=input, entonces blame siempre marca las líneas como "Not Committed Yet", incluso si no fueron modificadas.
No intente convertir las terminaciones de línea al crear el falso cometer para que la culpa funciona correctamente independientemente de la configuración de autocrlf.

 6
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-27 08:16:09

Otra posibilidad: error tipográfico de nombre de archivo sensible a mayúsculas y minúsculas

Tuve el mismo problema con git blame file.txt, luego se dio cuenta de que había hecho un error tipográfico de nombre de archivo sensible a mayúsculas y minúsculas con file.txt

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

 1
Author: John Jacecko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-21 14:36:58