Jak filtrować git diff na podstawie rozszerzeń plików?
Czy istnieje możliwość ograniczenia git diff
do danego zestawu rozszerzeń plików?
10 answers
Tak, jeśli upewnisz się, że git rozszerza glob zamiast powłoki, to będzie pasować na każdym poziomie, więc coś takiego (cudzysłowy są ważne) powinno działać poprawnie.
git diff -- '*.c' '*.h'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-18 21:33:46
Aby załączyć pliki rekurencyjnie (łącznie z bieżącym katalogiem) zadziałało to dla mnie:
git diff -- '***.py'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 11:36:38
Albo użyj globstar powłoki (która wykonuje rekurencyjne wyszukiwanie)1,2:
shopt -s globstar
git diff -- *.py **/*.py
Lub użyj find:
find -name '*.py' -print0 | xargs -0 git diff --
Oba są nazwami specjalnymi i znakami odstępów. Chociaż możesz chcieć filtrować katalogi posiadające rozszerzenie. py:)
1 lubię robić git diff -- {.,**}/*.py
zazwyczaj
2 gdy globstar jest włączony, git diff -- **/*.py
zawiera już ./*.py
. Na stronie podręcznika Basha: 'jeśli następuje a/ , dwa sąsiadujące * s będą pasowały tylko do katalogów i podkatalogi.'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 15:17:34
Dla prostych wzorców plików wydaje się to działać:
$ git ls-files -zm '*.txt' | xargs --null git diff
Białe znaki są bezpieczne i możesz mieć wiele rozszerzeń:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-18 21:27:01
Argument wiersza poleceń dla rozszerzenia.
git diff *.py
W alternatywie, możesz przełożyć find
na git diff
:
find . -name '*.py' -type f | git diff --
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-18 23:29:54
Jak przetestowano na git w wersji 2.18.0, rozszerzenie pliku powinno być cytowane podwójnymi cudzysłowami. Jeśli chcesz znaleźć Ostatnie różnice między lokalnym repozytorium a zdalnym, po wyciągnięciu możesz użyć:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Na przykład:
git diff master@{1} origin/master --name-only "*.cs"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-27 13:21:31
Żadna z powyższych odpowiedzi nie działa dla mnie pod git bash
w systemie Windows. Nie jestem pewien, czy chodzi o wersję (używam 1.8.4) czy o Windows / bash; również, w moim przypadku, chciałem rozróżnić dwie gałęzie, w których każda gałąź miała dodatkowe pliki nie obecne w drugiej gałęzi (stąd te oparte na 'find' są niedbałe).
W każdym razie zadziałało mi to (w moim przykładzie szukanie różnic między plikami Pythona):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-08 17:25:48
git diff
pokazuje tylko różnice w nieakstragowanych plikach.
Znalazłem to pytanie, ponieważ chciałem wykluczyć .info
pliki z git diff
. Udało mi się to osiągnąć poprzez umieszczenie go za pomocą git add *.info
, co zmniejsza ilość pozostawionych plików.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 10:46:24
Skończyłem z tym:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Wyświetla diffs dla podanego commita tylko jeśli nazwa pliku zawiera słowo 'test' (wielkość liter jest niewrażliwa na wielkość liter) i nie kończy się na .sql
, zmodyfikuj potok tak, jak jest to konieczne dla Twojego przypadku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-06 21:04:14
Uwaga, że params kolejność robi różnicę...na przykład:
git diff master --name-only --relative -- "**/*.ts" "**/*.tsx" "**/*.js" "**/*.jsx" "**/*.vue"
'diff' musi być poprzedzone 'master'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-20 07:04:02