Wiem, jak pobrać datę ostatniej modyfikacji pojedynczego pliku w repozytorium git:
git log -1 --format="%ad" -- path/to/file
Czy istnieje prosty i skuteczny sposób, aby zrobić to samo dla wszystkich plików obecnych w repozytorium?
Prostą odpowiedzią byłoby powtórzenie każdego pliku i wyświetlenie czasu jego modyfikacji, tj .:
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%ad" -- $filename) $filename"
done
To da wynik w następujący sposób:
Fri Dec 23 19:01:01 2011 +0000 Config
Fri Dec 23 19:01:01 2011 +0000 Makefile
Oczywiście możesz to kontrolować, ponieważ w tym momencie jest to tylko skrypt bashowy - więc dostosuj go do swoich potrzeb!
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ai" -- $filename) $filename"; done | sort
To podejście działa również w przypadku nazw plików zawierających spacje:
Przykładowe dane wyjściowe:
Dane wyjściowe można sortować według znacznika czasu modyfikacji, dodając
| sort
na końcu:źródło
To jest drobna poprawka odpowiedzi Andrew M. (Nie mogłem skomentować jego odpowiedzi.)
Zawiń pierwszą nazwę pliku $ w cudzysłów , aby obsługiwać nazwy plików z osadzonymi spacjami.
Przykładowe dane wyjściowe:
Rozumiem, że rozwiązanie Andrew (oparte na ls-tree ) działa z nagimi repozytoriami! (Nie dotyczy to rozwiązań wykorzystujących pliki ls.)
źródło
Oto wersja odpowiedzi Andrew M dla skorupek ryb dla tych, którzy używają ryb.
Przechowuję to jako funkcję ryby dla łatwego dostępu.
źródło
Dla tych z nas korzystających z Windows i PowerShell, odpowiedź Andrew M, z poprawką czytelną dla komputera:
Przykładowe dane wyjściowe:
źródło