Git winy nie pokazuje historii


88

Kiedy uruchamiam git blame na pliku (używając msysgit), zawsze otrzymuję następujący rodzaj wydruku:

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

tj. pokazuje wszystkie wiersze jako jeszcze niezatwierdzone.

Wypróbowałem to na wielu plikach, które mają wiele zatwierdzeń - zawsze te same wyniki. Próbowałem też użyć ścieżki względnej / pełnej, ale wydaje się, że nie robi to różnicy.

Kiedy próbuję wykorzystać winę TortoiseGit, zawsze pokazuje każdą linię jako ostatnią zatwierdzoną przy pierwszym zatwierdzeniu:

tekst alternatywny

nawet pomyślałem, jak już powiedziałem, w historii tych plików są dziesiątki zatwierdzeń.

Pomysły?

Edycja - więcej informacji

  • Git blame działa dobrze na GitHub, gdzie jest hostowane to repozytorium.
  • Działa również dobrze, jeśli sklonuję go na komputer z systemem Linux i obarczam winą tam
  • Wygląda na to, że tylko na msysgit to nie działa

Dla mnie ten problem wynikał z użycia ścieżki dowiązanej symbolicznie jako dołączonej do ścieżki rozpoznanej przez repozytorium, więc pomyślał, że plik jest całkowicie nowy.
Kzqai

Uwaga: Począwszy od git 2.0.1 (25 czerwca 2014 r.), Git winny powinien przestać zgłaszać wszystkie te wiersze „Jeszcze niezatwierdzone”. Zobacz moją odpowiedź poniżej
VonC


Dotyczy to również WSL, więc dodałem tag. Mam nadzieję, że wszystko w porządku.
mikemaccana

Odpowiedzi:


127

git blame file.txtobwinia wersję file.txt w kopii roboczej. Jeśli plik.txt ma w repozytorium znaki nowej linii Windows (CRLF), a ty je masz core.autocrlf = true, to każda linia pliku.txt zostanie uznana za inną i zostanie zgłoszona git blamejako jeszcze niezatwierdzona.

Powodem, dla którego git blame <my_branch>(lub nawet lepiej git blame HEAD, który działa bez względu na gałąź, w której się znajdujesz) jest to, że nie obwinia wersji roboczej kopii, więc nie ma możliwości, aby wiersze jeszcze nie zostały zatwierdzone.


118
git blame -wignoruje białe znaki, więc nadal możesz winić kopię roboczą, jeśli chcesz
Kyle Heironimus

13
Git blame -w powinna być odpowiedzią osobną i akceptowaną;). Zaakceptowana odpowiedź bez komentarza była dla mnie bezużyteczna.
Guillaume Perrot

55

Znalazłem rozwiązanie - bardzo dziwne.

Jeśli uruchomię to:

git blame file.txt

Historia jest zepsuta, jak napisano powyżej.

Jeśli zamiast tego zrobię to:

git blame my_branch file.txt

To działa!

To bardzo dziwne, ponieważ AFAICS użycie nie wymaga nazwy gałęzi:

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

7
To działa dla mnie, dzięki za opublikowanie. Powinieneś oznaczyć ten jako odpowiedź IMO.
wes

Działa to dla mnie w msysgit, ale w nazwie pliku jest rozróżniana wielkość liter. Więc mogę pisać git blame mybranch cmakelists.txti to się nie powiedzie; ale jeśli napiszę, git blame mybranch CMakeLists.txtto zadziała.
pętla

Zgadzam się, wes; wina polegała na braku historii, dopóki nie określiłem gałęzi, co jest niezgodne z dokumentacją.
josephdpurcell


8

Począwszy od git 2.0.1 (25 czerwca 2014 r.), Git winny powinien przestać zgłaszać wszystkie te wiersze „Jeszcze niezatwierdzone”.

Zobacz popełnić 4d4813a (26 kwietnia 2014) przez brian m. carlson ( bk2204) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu e934c67 , 06 czerwca 2014)

blame: poprawnie obsługuje pliki niezależnie od autocrlf

Jeśli plik zawierał CRLFzakończenia linii w repozytorium z core.autocrlf=input, wtedy obwiniaj linie zawsze oznaczane jako „ Not Committed Yet”, nawet jeśli były niezmodyfikowane.
Nie próbuj konwertować końcówek linii podczas tworzenia fałszywego zatwierdzenia, aby adnotacja działała poprawnie niezależnie od autocrlfustawienia.


8
Nadal mam problem w git v2.1.3
DBedrenko,

Mam problem z gitem w wersji 2.16.1.windows.1
Radon8472

@ Radon8472 Czy możesz dodać nowe pytanie ilustrujące problem, wraz z git config -lwynikami (i linkiem do tej odpowiedzi): to pozwoli mi i innym spróbować sprawdzić, czy problem nadal występuje.
VonC

1

Inna możliwość: literówka w nazwie pliku uwzględniająca wielkość liter

Miałem ten sam problem z git blame file.txt, a potem zdałem sobie sprawę, że wprowadziłem literówkę w nazwie pliku z rozróżnianiem wielkości liter w pliku file.txt

Zmieniłem go na File.txt (na przykład) i otrzymałem oczekiwane wyniki bez konieczności określenia my_branch: git blame File.txt

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.