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.

 120
Author: benizi, 2011-07-29

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 dodano
  • C skopiowane
  • D usunięty
  • M Modified
  • R przemianowane na
  • T zmienić ich typ (tryb)
  • U Unmerged
  • X Unknown
  • B mieli ich parowanie złamane
  • * All-or-none

Moż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.

 214
Author: zen,
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: dokument diff-filter wykluczenie

W 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.

 19
Author: VonC,
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.

 4
Author: Lily Ballard,
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

 3
Author: iwg,
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")

 0
Author: Krzysztof Stankiewicz,
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