Colpa di Git che non mostra storia


88

Quando eseguo git blame su un file (usando msysgit) ottengo sempre il seguente tipo di stampa:

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

cioè mostra tutte le righe come Not Yet Committed.

Ho provato questo su molti file, che hanno molti commit - sempre gli stessi risultati. Ho anche provato a utilizzare il percorso relativo / completo, ma sembra non fare differenza.

Quando provo a usare la colpa di TortoiseGit, mostra sempre ogni riga come ultima commessa al primo commit:

testo alternativo

anche se, come ho detto, ci sono effettivamente decine di commit nella cronologia di questi file ..

Idee?

Modifica - Ulteriori informazioni

  • Git blame funziona bene su GitHub, dove è ospitato questo repository.
  • Funziona bene anche se lo clono su una macchina Linux e do la colpa lì
  • Sembra che solo su msysgit questo non funzioni

Per me questo problema è derivato dall'utilizzo di un percorso con collegamento simbolico rispetto a un percorso riconosciuto dal repository, quindi ha pensato che il file fosse completamente nuovo.
Kzqai

Nota: a partire da git 2.0.1 (25 giugno 2014), git blame dovrebbe smettere di riportare tutte quelle righe "Not Yet Committed". Vedi la mia risposta di seguito
VonC


Ciò influisce anche su WSL, quindi ho aggiunto il tag. Spero che vada bene.
mikemaccana

Risposte:


126

git blame file.txtincolpa la versione di file.txt nella tua copia di lavoro. Se file.txt ha Windows-newlines (CRLF) nel repository e tu l'hai core.autocrlf = true, allora ogni riga di file.txt sarà considerata diversa e verrà segnalata da git blamecome non ancora confermata .

Il motivo per cui git blame <my_branch>(o anche meglio git blame HEAD, che funziona indipendentemente dal ramo in cui ti trovi) funziona, è che non incolpa la versione della copia di lavoro, quindi non c'è il potenziale per le linee non ancora impegnate.


117
git blame -wignora lo spazio bianco, quindi puoi ancora incolpare la copia funzionante se lo desideri
Kyle Heironimus

13
Git blame -w dovrebbe essere una risposta separata e quella accettata;). La risposta accettata senza il commento è stata inutile per me.
Guillaume Perrot

55

Ho trovato la soluzione - molto strano.

Se eseguo questo:

git blame file.txt

La storia è rotta, come postato sopra.

Se invece lo faccio:

git blame my_branch file.txt

Funziona!

Questo è molto strano, perché AFAICS l'utilizzo non richiede un nome di ramo:

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

7
Questo funziona per me, grazie per averlo pubblicato. Dovresti contrassegnare questo come risposta IMO.
mercoledì

Questo funziona per me in msysgit ma il nome del file fa distinzione tra maiuscole e minuscole. Quindi posso scrivere git blame mybranch cmakelists.txte fallirà; ma se scrivo git blame mybranch CMakeLists.txtfunzionerà.
loop

Sono d'accordo, wes; la colpa non mostrava la cronologia fino a quando non ho specificato il ramo, e questo non è coerente con la documentazione.
josephdpurcell


8

A partire da git 2.0.1 (25 giugno 2014), git blame dovrebbe smettere di riportare tutte quelle righe "Not Yet Committed".

Vedere commit 4d4813a (26 aprile 2014) di brian m. carlson ( bk2204) .
(Fuso da Junio ​​C Hamano - gitster- in commit e934c67 , 06 giugno 2014)

blame: gestisce correttamente i file indipendentemente da autocrlf

Se un file conteneva le CRLFterminazioni di riga in un repository con core.autocrlf=input, incolpare sempre le righe contrassegnate come " Not Committed Yet", anche se non sono state modificate.
Non tentare di convertire le terminazioni di riga durante la creazione del commit falso in modo che la colpa funzioni correttamente indipendentemente autocrlfdall'impostazione.


8
Ho ancora il problema in git v2.1.3
DBedrenko

Ho il problema con la versione 2.16.1.windows.1 di git
Radon8472

@ Radon8472 Puoi aggiungere una nuova domanda che illustri il problema, con il tuo git config -loutput (e un link a questa risposta): questo permetterà a me e ad altri di provare e vedere se il problema persiste.
VonC

1

Un'altra possibilità: errore di battitura nel nome del file con distinzione tra maiuscole e minuscole

Ho avuto lo stesso problema con git blame file.txt, poi mi sono reso conto di aver fatto un errore di battitura nel nome del file con distinzione tra maiuscole e minuscole con file.txt

L'ho modificato in File.txt (ad esempio) e ho ottenuto i risultati attesi senza dover specificare my_branch: git blame File.txt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.