Git culpa não mostrando história

88

Quando executo git blame em um arquivo (usando msysgit), sempre recebo o seguinte tipo de impressão:

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

ou seja, mostra todas as linhas como Ainda não confirmadas.

Eu tentei isso em muitos arquivos, que têm muitos commits - sempre os mesmos resultados. Eu também tentei usar o caminho relativo / completo, mas parece não fazer diferença.

Quando tento usar a culpa do TortoiseGit, ele sempre mostra cada linha como sendo a última cometida no primeiro commit:

texto alternativo

até pensei, como eu disse, na verdade existem dezenas de commits no histórico desses arquivos.

Ideias?

Editar - Mais informações

  • Git blame funciona bem no GitHub, onde este repo está hospedado.
  • Também funciona bem se eu clonar em uma máquina Linux e colocar a culpa lá
  • Parece que apenas no msysgit isso não funciona
Assaf Lavie
fonte
Para mim, esse problema resultou do uso de um caminho com link simbólico em oposição a um caminho que o repositório reconheceu, então ele pensou que o arquivo era completamente novo.
Kzqai
Observação: a partir do git 2.0.1 (25 de junho de 2014), o git blame deve parar de relatar todas as linhas "Ainda não confirmado". Veja minha resposta abaixo
VonC
Na lista de discussão: git.661346.n2.nabble.com/… Também acontece no Linux.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Isso também afeta o WSL, então adicionei a tag. Espero que esteja tudo bem.
mikemaccana

Respostas:

126

git blame file.txtculpa a versão do arquivo.txt em sua cópia de trabalho. Se file.txt tiver Windows-newlines (CRLF) no repo e você tiver core.autocrlf = true, então cada linha de file.txt será considerada diferente e será relatada por git blamecomo ainda não confirmada.

A razão pela qual git blame <my_branch>(ou melhor ainda git blame HEAD, que funciona independentemente do branch em que você está) funciona, é que ele não culpa a versão da cópia de trabalho, então não há potencial para linhas ainda não terem sido confirmadas.

kusma
fonte
117
git blame -wignora o espaço em branco, então você ainda pode culpar a cópia de trabalho, se desejar
Kyle Heironimus
13
Git blame -w deve ser uma resposta separada e aceita;). A resposta aceita sem o comentário foi inútil para mim.
Guillaume Perrot
55

Encontrei a solução - muito estranho.

Se eu executar este:

git blame file.txt

A história está quebrada, como postado acima.

Se eu fizer isso em vez disso:

git blame my_branch file.txt

Funciona!

Isso é muito estranho, porque AFAICS o uso não requer um nome de branch:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
Assaf Lavie
fonte
7
Isso funciona para mim, obrigado por postar. Você deve marcar este como a resposta IMO.
wes
Isso funciona para mim no msysgit, mas o nome do arquivo diferencia maiúsculas de minúsculas. Posso escrever git blame mybranch cmakelists.txte falhará; mas se eu escrever git blame mybranch CMakeLists.txtvai funcionar.
loop
Eu concordo, wes; a culpa não mostrava histórico até que eu especificasse o ramo, e isso é inconsistente com a documentação.
josephdpurcell
OMG, a culpa está tão quebrada.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
8

A partir do git 2.0.1 (25 de junho de 2014), o git blame deve parar de relatar todas as linhas "Ainda não confirmado".

Veja commit 4d4813a (26 abr 2014) por brian m. Carlson ( bk2204) .
(Incorporado por Junio ​​C Hamano - gitster- no commit e934c67 , 06 de junho de 2014)

blame: lida corretamente com arquivos independentemente de autocrlf

Se um arquivo continha CRLFterminações de linha em um repositório com core.autocrlf=input, a culpa sempre marcou as linhas como " Not Committed Yet", mesmo se não foram modificadas.
Não tente converter as terminações de linha ao criar o commit falso para que a culpa funcione corretamente, independentemente da autocrlfconfiguração.

VonC
fonte
8
Ainda tenho o problema no git v2.1.3
DBedrenko
Tenho o problema com o git versão 2.16.1.windows.1
Radon8472
@ Radon8472 Você pode adicionar uma nova pergunta ilustrando o problema, com sua git config -lsaída (e um link de volta para esta resposta): isso permitirá que eu e outras pessoas tentemos e ver se o problema persiste.
VonC
1

Outra possibilidade: erro de digitação de nome de arquivo que diferencia maiúsculas de minúsculas

Tive o mesmo problema com git blame file.txt, mas então percebi que cometi um erro de digitação que diferencia maiúsculas de minúsculas com file.txt

Alterei para File.txt (por exemplo), e obtive os resultados esperados sem ter que especificar my_branch: git blame File.txt

John Jacecko
fonte