Próbuję wykluczyć plik ( db/irrelevant.php
) z Git diff. Próbowałem umieścić plik w db
podkatalogu wywoływanym .gitattributes
za pomocą wiersza irrelevant.php -diff
i próbowałem również utworzyć plik o nazwie .git/info/attributes
zawierającej db/irrelevant.php
.
We wszystkich przypadkach db/irrelevant.php
plik jest zawarty w pliku różnicowym jako łatka binarna Git. Chcę, aby zmiany w tym pliku były ignorowane przez polecenie diff. Co ja robię źle?
.gitignore
składnia pliku. Np.:!*shrinkwrap.yaml
Zamiast:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(podwójne cudzysłowy zamiast pojedynczych cudzysłowów)git diff -- . :(exclude)db/irrelevant.php
Można skonfigurować niestandardowy sterownik różnicowy za pomocą polecenia no op i przypisać go do plików, które należy zignorować.
Za pomocą tego polecenia utwórz sterownik różnic specyficzny dla repozytorium
lub dla wszystkich twoich transakcji repo
--global
.(Jeśli
/bin/true
nie istnieje w MacOS, alternatywą byłoby użycie/usr/bin/true
lubecho
).Następnie przypisz nowy sterownik różnicowy do plików, które chcesz zignorować w swoim
.git/info/attributes
pliku.Jeśli ten stan ma być współdzielony z innymi programistami, możesz użyć
.gitattributes
zamiast tego.git/info/attributes
i udostępnićgit config
polecenie swoim rówieśnikom (poprzez plik dokumentacji lub coś takiego).źródło
[diff "nodiff"]
`command = / bin / true`, a następnie utworzyłem plik o nazwie .git / info / atrybuty, do których dodałem:irrelevant.php diff=nodiff
git diff --stat
. W takim przypadku można zastosowaćgit diff ... | diffstat
obejście.--no-ext-diff
Można również użyć filterdiff program do patchutils odbioru programu, aby wykluczyć niektóre części diff. Na przykład:
źródło
-p
z manpage (1) jest „-pn, --strip-match = n Podczas dopasowywania, zignoruj pierwsze n składników ścieżki”. Zajęło mi trochę czasu, aby złapać, że-p 1
usuwadb
część z drogi PO. Jeśli chcesz tylko podać nazwę pliku i zignorować wszystkie możliwości ścieżki / katalogu, możesz użyć-p 99
.Ta metoda jest krótsza niż przyjęte odpowiedzi.
Aby uzyskać więcej informacji na temat różnych możliwości włączenia / wyłączenia, przeczytaj ten drugi post
źródło
To jedno-liniowe rozwiązanie nie wymaga innych narzędzi / plików do pobrania:
Gdzie
file/to/exclude.txt
oczywiście jest nazwa pliku, który chcesz wykluczyć.Edycja: kredyt ksenzee za naprawienie usuniętych plików zerwania różnic.
źródło
git diff --stat master
bez większego powodzenia - czy możesz pomóc?Naprawdę dobra odpowiedź od KurzedMetal na to, co musiałem zrobić, czyli zobaczyć, że plik się zmienił, ale nie wygenerować różnicy, która w moim przypadku mogłaby być ogromna.
Ale mój kolega zaproponował podejście, które było jeszcze prostsze i działało dla mnie:
dodanie
.gitattributes
pliku do katalogu, w którym plik, który ma zostać zignorowany,git diff
znajduje się w następującej treści:file-not-to-diff.bin -diff
To pozwala
git status
„zobaczyć”, jeśli plik się zmienił.git diff
zobaczy również, że plik się zmienił, ale nie wygeneruje plikudiff
.To
.bin
rozszerzenie pliku w tym przykładzie było celowe. Zdaję sobie sprawę, że jest to domyślne zachowanie git dla plików binarnych i nie wymaga specjalnej obsługi.gitattributes
. Ale w moim przypadku pliki te zostały rozpoznane przez git i narzędzie „file” jako pliki tekstowe i to załatwiło sprawę.źródło
Najprostsza odpowiedź
git diff ':!db/irrelevant.php'
To jest zaraz
':!<path to file>'
po poleceniu diff. Polecenie diff może być tak skomplikowane, jak chcesz, i możesz używać symboli wieloznacznych takich jak*.min.js
lub dodawać wiele wykluczeń (oddzielaj spacje cytowanymi blokami), jeśli chcesz.źródło
Względem katalogu głównego git
git diff
akceptuje opcjonalne wykluczenieMożesz dodać kilka dzikich kart
Kieruj na określone typy plików
Lub upuść mały skrypt dla swoich plików dot
Takich jak
.bash_profile
lub.zshrc
źródło
git diff --staged
Nadzieję, że to ci pomoże.To bardzo proste, możesz wykluczyć to, co chcesz za pomocą standardowych poleceń unix, te polecenia są dostępne w git bash, nawet w środowisku Windows. Poniższy przykład pokazuje, jak wykluczyć diff dla plików pom.xml, najpierw sprawdź diff do master tylko dla nazw plików, a następnie używając 'grep -v' wyklucz pliki, których nie chcesz, a następnie uruchom ponownie diff dla master z przygotowaną listą:
źródło
podobne do rozwiązania Bena Rouxa , ale mimo to udostępnianie:
lub, jeśli zmiany zostały już zatwierdzone lokalnie:
Przykłady:
źródło
Wykonuję następujące czynności:
Wiem, że to nie jest eleganckie rozwiązanie i czasami nie można go użyć (np. Jeśli masz już rzeczy wystawione), ale robi to bez konieczności wpisywania skomplikowanego polecenia
źródło
Jeśli chcesz to zrobić tylko w celu wizualnej kontroli różnicy, wizualne narzędzie różnicowania (takie jak Meld ) pozwoli ci to zrobić za pomocą krótkiego, łatwego do zapamiętania polecenia.
Najpierw skonfiguruj narzędzie do porównywania, jeśli jeszcze tego nie zrobiłeś.
Następnie możesz uruchomić katalog różnic.
Będziesz mógł przeglądać pliki różnic (według plików) w Meld (lub wybranym narzędziu). Po prostu nie otwieraj pliku, który chcesz zignorować.
źródło