Filtruj git diff według rodzaju zmiany
Czy istnieje sposób na ograniczenie git diff
do zmienionych plików?
Chciałbym zobaczyć różnice między dwoma zatwierdzeniami, ale wykluczam ścieżki, które nie istnieją w jednym lub drugim (dodawanie/usuwanie). Poniższy Perl one-liner ilustruje większość tego, czego chcę:
git diff master.. | perl -lnwe 'print unless /^(new|deleted) file/../^diff/ and not /^diff/'
Ale to pozostawia diff --git a/path b/path
linie dla plików, które były nowe lub usunięte. Plus byłoby o wiele ładniej, gdybym nie musiał parsować (również nie działa, jeśli jakiś kawałek zawiera coś pasującego / ^diff/, dla przykład).
Inną alternatywą, którą próbowałem było:
git diff --name-status (args) | perl -lnwe 'print if s/^M\s+//' | xargs git diff (args) --
Jego wydajność jest lepsza, ale nadal czuje się hakerski.
5 answers
Szukasz --diff-filter=M
aby pokazać tylko pliki * M *odified pomiędzy dwoma gałęziami.
From man git-diff
--diff-filter=[ACDMRTUXB*]
Wybierz tylko pliki, które są
A
dodanoC
skopiowaneD
usuniętyM
ModifiedR
przemianowane naT
zmienić ich typ (tryb)U
UnmergedX
UnknownB
mieli ich parowanie złamane*
All-or-noneMożna użyć dowolnej kombinacji znaków filtra.
Gdy DO KOMBINACJI Dodano * (All-or-none), wszystkie ścieżki są zaznaczone, jeśli jest jakiś plik spełniający inne kryteria w porównanie; jeśli nie ma pliku spełniającego inne kryteria, nic jest wybrany.
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-07-29 22:25:47
Ponieważ Git 2.10 (Q3 2016) przypomni nam, istnieje łatwiejszy sposób, aby " pokazać wszystko poza dodanymi/usuniętymi plikami."(właściwie od Git 1.8.5, lipiec 2013)
git diff --diff-filter=ad master..
Zobacz commit 16726cf (14 Jul 2016) by Junio C Hamano (gitster
).
(dodany przez Junio C Hamano -- gitster
-- in commit 2f8c654, 08 Aug 2016)
diff
: dokumentdiff-filter
wykluczenieW V1. 8. 5 dni, 7f2ea5f (
diff
: Zezwalaj na małe litery list do określenia jaką klasę zmian wykluczyć, 2013-07-17) nauczał "--diff-filter
" mechanizm przyjmowania małych liter jako wykluczenia , ale zapomnieliśmy udokumentuj to.
Więc dokumentacja na diff-options
teraz (w końcu) zawiera:
Te wielkie litery mogą być zmniejszone, aby wykluczyć.
Np.--diff-filter=ad
wyklucza dodane i usunięte ścieżki.
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
2016-08-12 06:56:35
Możesz użyć flagi --diff-filter, aby to zrobić. git diff --diff-filter=CMRTUXB master..
powinien pokazywać wszystko poza dodanymi / usuniętymi plikami.
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-07-29 22:11:51
Aby zobaczyć wszystkie zmodyfikowane i nowe pliki możesz użyć
git diff --name-only --diff-filter=ACMR PREV_VERSION master
PREV_VERSION
to hash Twojego pierwszego commita.
Aby uzyskać eksport jako zip możesz użyć tego kodu
git archive --output=export.zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)
Uwaga: .gitignore
nie jest w export.zip
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-09-20 12:02:56
Używałem Notepad++ (Windows) i tych wyrażeń regularnych do filtrowania typów rozszerzeń i niektórych ścieżek z pliku diff.
^Index.*\.(dll|pdb|exe|txt|zip|log|ism|resx|tlog|htm|lib)$[\s\S.]*?^Index
^Index: Shared/.+$[\s\S.]*?^Index
^Index: Next/source/Utility/.+$[\s\S.]*?^Index
Problem polega tylko na tym, że gdy dojdzie do końca. Musisz "Ctrl + home" i przejść ponownie, aż nic nie znajdzie.
(Zastąp znalezione rzeczy "indeksem")
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-09-02 00:19:43