Zastanawiam się, jak mogę wykluczyć cały katalog z mojego pliku różnicowego Git. (W tym przypadku / specyfikacja). Tworzę różnicę dla całej naszej wersji oprogramowania za pomocą polecenia git diff. Jednak zmiany w specyfikacji są nieistotne dla tej procedury i po prostu powodują bóle głowy. teraz wiem, że mogę to zrobić
git diff previous_release..current_release app/
Spowoduje to utworzenie różnicy dla wszystkich zmian w katalogu aplikacji, ale nie na przykład w katalogu lib /. Czy ktoś wie, jak wykonać to zadanie? Dzięki!
Edycja: Chcę tylko, aby było jasne, wiem, że mogę po prostu podać parametry wszystkich moich katalogów na końcu, minus / spec. Miałem nadzieję, że istnieje sposób, aby naprawdę wykluczyć pojedynczy katalog w poleceniu.
Odpowiedzi:
Zakładając, że używasz basha i masz włączone rozszerzone globbing (
shopt -s extglob
), możesz sobie z tym poradzić od strony powłoki:Dzięki temu nie musisz wymieniać wszystkich innych rzeczy.
Lub, agnostyk:
Możesz zawrzeć to w jednowierszowym skrypcie powłoki, aby zaoszczędzić sobie konieczności ponownego wpisywania argumentów.
źródło
.!(.|)
dopasować wszystko, zaczynając od.
poza.
i..
.--
co właśnie dodałem, powinno to naprawić.--name-only
na samym końcu.-- path/of/new/file
wyskoczy błąd, ale wszystko co musisz zrobić, to dodać i to rozgryźć :)Na podstawie tej odpowiedzi możesz również użyć:
Jest to nowa funkcja gita, która umożliwia wykluczanie pewnych ścieżek. Powinien być bardziej niezawodny niż różne oneliny muszlowe.
Publikuję to tutaj, ponieważ to pytanie nadal jest trafieniem nr 1 dla „ścieżki wykluczenia git diff”.
źródło
git diff previous_release current_release --name-status -- . ':!spec'
current_release
iprevious_release
- sprawił, że uśmiechnąłem się, kiedy się zorientowałem.git diff --stat dev -- . ':!/Mopy/Docs/*'
. Co nie zadziałało dla mniegit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
i odmianygit diff --check -- . ':!config/database.yml'
git diff previous_release current_release -- . ':!file_a' ':!file_b'
Jeśli chcesz określić więcej niż jedną ścieżkę do wykluczenia w git diff, po prostu dodaj dodatkowe parametry wykluczające na końcu, np. Aby wykluczyć ze statystyk wszystko w katalogach vendor i bin : -
źródło
Możesz spróbować usunąć atrybut diff dla dowolnych plików w katalogu lib.
.gitattributes
:racl101 dodaje w komentarzach :
źródło
.gitattributes
plik w specjalnej gałęzi stworzonej tylko dla tego rodzaju różnic w „wydaniu”;) Zrestartuj tę specjalną gałąź na wierzchucurrent_release
i wykonaj tam swoje porównywanie ._site/* -diff
Git diff akceptuje teraz niestandardowy format wykluczeń:
git diff -- ':(exclude)lib/*'
Uważaj, jeśli masz wiele powtarzających się nazw folderów („/ app”, „/ lib” itp.), Ponieważ spowoduje to wykluczenie plików względem bieżącego katalogu roboczego ORAZ katalogu głównego git.
źródło
git diff -- . ':(exclude)lib/*'
?git diff
wszystko, co dotyczy twojej obecnej ścieżki, zamiast wymagaćgit diff -- .
git diff -- ":(exclude)lib/*"
Względem katalogu głównego git
git diff
akceptuje opcjonalne wykluczenieMożesz dodać kilka symboli wieloznacznych
Kieruj reklamy na określone typy plików
Zastosowano trochę cukru syntaktycznego
Lub upuść mały skrypt dla swoich plików dotfiles
Takich jak
.bash_profile
lub.zshrc
źródło
źródło