2016-08-05 11 views
5

Chciałbym uzyskać listę wszystkich plików w moim oddziale, najlepiej w widoku drzewa, wraz z hashem zatwierdzenia, w którym zostały ostatnio zmodyfikowane (tzn. nie hash samego pliku, ale zatwierdzenia). Czy jest do tego odpowiednie polecenie git, czy naprawdę muszę przeszukiwać dziennik?git: lista wszystkich nazw plików i skrótów ich ostatniego zatwierdzenia

To pytanie jest związane z How do I find the most recent git commit that modified a file? ale chcę uzyskać listę wszystkich plików, na przykład:

6f88a51 abc.h 
3f5d6fb abc.cpp 
3f5d6fb bcd.h 
1964be2 bcd.cpp 
... 
+0

Jak o 'dziennika git - "? – Shravan40

Odpowiedz

1

Command:

$ git ls-files -z \ | GIT_PAGER= xargs -0 -L1 -I'{}' git log -n 1 --format="%h {}" -- '{}' f5fe765 LICENSE 0bb88a1 README.md 1db10f7 example/echo.go e4e5af6 example/echo_test.go ...

Uwagi:

  • git ls-files wymienia wszystkie pliki dodane do git rekurencyjnie (w przeciwieństwie find, wyklucza nieśledzone pliki i .git)
  • xargs -L1 Wykonuje podane polecenie dla każdego argumentu wejściowego (nazwa pliku)
  • xargs -I{} umożliwia zastąpienie {} symbol argumentu wejściowego (nazwa pliku)
  • stosując git ls-files -z i xargs -0 zmiany ogranicznika z \n do \0, w celu uniknięcia potencjalnych problemów z biało-spacjami Nazwy plików
  • wyczyszczenie GIT_PAGER zapobiega git log z potokiem to wyjście do less
+0

arigato, bardzo ładne! Rozwiązanie blue112 również działa dobrze, ale uważam, że twoje jest lepsze –

2
for i in $(find -type f | grep -v '.git'); 
    do echo -n "$i - "; 
    git log --pretty="format:%h" -1 $i | cat; 
    echo; 
done 

To powinno załatwić sprawę, na bash

+0

dziękuję, również daje mi to, co chcę, ale lubiłem rozwiązanie gavvs lepiej, ponieważ jest bardziej eleganckie –

0

można po prostu użyć Polecenie ls-tree

git ls-tree HEAD 

To pokaże ci najnowsze pliki z ich skrótami.

enter image description here

+1

To jest nieprawidłowe. Pokazuje SHA-1 plam i drzew (które OP wyraźnie stwierdził, że nie chce) zamiast SHA-1 ostatniego zatwierdzenia, które dotknęło plików. – Alderath

+0

@Alderath ma rację, pokazuje skróty plików, a nie zatwierdza hasze. Ponadto nie rekursywnie drukuje katalogów. – gavv

+0

Chociaż nie jest to zgodne z oczekiwaniami, git ls-tree -r HEAD może pokazać wszystkie bloby w drzewie HEAD. – ElpieKay

Powiązane problemy