Ze względu na biurokrację muszę uzyskać listę wszystkich zmienionych plików w moim repozytorium do raportu (zacząłem od istniejącego kodu źródłowego).
Co powinienem uruchomić, aby uzyskać tę listę?
Ze względu na biurokrację muszę uzyskać listę wszystkich zmienionych plików w moim repozytorium do raportu (zacząłem od istniejącego kodu źródłowego).
Co powinienem uruchomić, aby uzyskać tę listę?
Odpowiedzi:
W przypadku plików zmienionych między podanym SHA a bieżącym zatwierdzeniem:
git diff --name-only <starting SHA> HEAD
lub jeśli chcesz dołączyć zmienione, ale jeszcze niezatwierdzone pliki:
git diff --name-only <starting SHA>
Mówiąc bardziej ogólnie, następująca składnia zawsze powie ci, które pliki zmieniły się między dwoma zatwierdzeniami (określone przez ich SHA lub inne nazwy):
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusflagi zamiast flagi --name-onlyjest przydatne, aby uzyskać listę plików i zobaczyć ich stan modyfikacji, na przykład Dodane lub Zmodyfikowane.
--name-statuspokazują, co się z nimi stało
Aby znaleźć nazwy wszystkich plików zmodyfikowanych od ostatniego zatwierdzenia:
git diff --name-only
Lub (aby uzyskać więcej informacji, w tym nieśledzone pliki):
git status
Aby wyświetlić listę wszystkich niestacjonarnych, śledzonych zmienionych plików:
git diff --name-only
Aby wyświetlić wszystkie etapowe śledzone zmienione pliki:
git diff --name-only --staged
Aby wyświetlić listę wszystkich przemieszczonych i niestacjonarnych śledzonych zmienionych plików:
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Aby wyświetlić wszystkie nieśledzone pliki (te wymienione obok git status, nie uwzględniając ignorowanych plików):
git ls-files --other --exclude-standard
Jeśli używasz tego w skrypcie powłoki, i chcesz programowo sprawdzić, czy te polecenia wrócił niczego, będziesz zainteresowany git diff„s --exit-codeopcja.
Kiedy dodałem / zmodyfikowałem / usunąłem wiele plików (od ostatniego zatwierdzenia), lubię patrzeć na te modyfikacje w porządku chronologicznym.
Do tego używam:
Aby wyświetlić wszystkie pliki niestacjonarne:
git ls-files --other --modified --exclude-standard
Aby uzyskać datę ostatniej modyfikacji dla każdego pliku:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Chociaż ruvim sugeruje w komentarzach :
xargs -0 stat -c '%y %n' --
Aby posortować je od najstarszych do nowszych:
sort
Alias ułatwia korzystanie z:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
Lub (krócej i wydajniej, dzięki Ruvim )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Na przykład:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Teraz mogę przejrzeć swoje modyfikacje, od najstarszych do nowszych.
xargsi jednego połączenia z stat? Pełny git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Potrzebuję listy plików, które zmieniły zawartość między dwoma zatwierdzeniami (tylko dodane lub zmodyfikowane), więc użyłem:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Różne opcje filtra różnicowego z dokumentacji git diff :
diff-filter = [(A | C | D | M | R | T | U | X | B)… [*]]
Wybierz tylko pliki, które są Dodane (A), Skopiowane (C), Usunięte (D), Zmodyfikowane (M), Zmienione (R), mają zmieniony ich typ (np. Zwykły plik, łącze symboliczne, podmoduł,…), nie są scalone (U), są nieznane (X) lub ich parowanie zostało przerwane (B). Można użyć dowolnej kombinacji znaków filtru (w tym żadnego). Po dodaniu * (wszystko lub brak) do kombinacji wszystkie ścieżki są wybierane, jeśli istnieje plik, który spełnia inne kryteria porównania; jeśli nie ma pliku spełniającego inne kryteria, nic nie jest wybierane.
Również te wielkie litery można zmniejszyć, aby wykluczyć. Np. --Diff-filter = ad wyklucza dodane i usunięte ścieżki.
Jeśli chcesz wyświetlić również status (np. A / M), zmień --name-onlyna --name-status.
Listę niestandowanych modyfikacji można uzyskać za pomocą git statusi greppolecenia jak poniżej. Coś takiego git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Dzięki temu git showmożesz uzyskać podobny wynik. Aby spojrzeć na zatwierdzenie (jak wygląda na git logwidoku) z listą plików zawartych w, użyj:
git show --name-only [commit-id_A]^..[commit-id_B]
Gdzie [commit-id_A]jest początkowe zatwierdzenie i [commit-id_B]ostatnie zatwierdzenie, niż chcesz pokazać.
Specjalna uwaga z ^symbolem. Jeśli tego nie umieścisz, informacja commit-id_A nie zostanie wdrożona.
Jeśli chcesz sprawdzić zmienione pliki, musisz zadbać o wiele drobnych rzeczy, na przykład, jeśli chcesz sprawdzić, który z plików został zmieniony, po prostu wpisz
stan git - pokaże pliki ze zmianami
jeśli chcesz wiedzieć, jakie zmiany mają zostać wprowadzone, możesz to sprawdzić na różne sposoby,
git diff - pokaże wszystkie zmiany we wszystkich plikach
dobrze jest tylko wtedy, gdy modyfikowany jest tylko jeden plik
a jeśli chcesz sprawdzić konkretny plik, użyj
git diff