Mam polecenie, które wyświetla pliki w moim projekcie:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Jak mogę filtrować pliki, aby nie wyświetlały się w .gitignore?
Myślałem, że używam:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
ale plik .gitignore może mieć wzorce globów (również nie będzie działać ze ścieżkami, jeśli plik znajduje się w .gitignore), jak mogę filtrować pliki na podstawie wzorców, które mogą mieć globusy?
find-sh {} +
na końcufind-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
na przykładistnieje komenda git do wykonania dokładnie tego: np
Jak już wspomniałeś, wykona podstawowy grep i większość normalnych opcji grep, ale nie przeszuka
.git
ani żadnego z plików lub folderów w twoim.gitignore
pliku.Aby uzyskać więcej informacji, zobacz
man git-grep
Podmoduły:
Jeśli masz inne repozytorium git wewnątrz tego repozytorium git (powinny znajdować się w submodułach), możesz użyć flagi,
--recurse-submodules
aby przeszukać również submodułyźródło
Aby wyświetlić pliki, które znajdują się w kasie i które są śledzone przez Git, użyj
To polecenie ma wiele opcji wyświetlania, np. Pliki w pamięci podręcznej, pliki bez śledzenia, pliki zmodyfikowane, pliki ignorowane itp
git ls-files --help
. Zobacz .źródło
git ls-files
ale nie sądzę, że ma opcję pokazania nieśledzonych plików, który?-o
(inny). Np.git ls-files -o -X .gitignore
.gitignore
.git ls-files
wypisują ./foo.txt, gdyfind
wypisują ./Foo.txtMożesz użyć tablicy, w której zostanie wykonany glob bash.
Posiadanie takich plików:
I posiadanie takiego
ignore
plikuZa pomocą
Spowoduje to:
Następnie możesz użyć dowolnej techniki do manipulowania tymi danymi.
Osobiście wolę coś takiego:
źródło
gitignore
jest nadzbiorembash
globu, będziesz tęsknił za czymś takim!file*
!file*
? Jako wzorzec globu w pliku zignorować czy jako nazwa pliku?gitignore
akceptuj wzorzec pliku, tak!file*
aby wykluczyć pliki, zaczynając odfile
, a także podwójną gwiazdkę**
.gitignore
ma wiele funkcji, z których wszystkie mogą nie być tak łatwe do wdrożenia bezpośrednio w Bash: git-scm.com/docs/gitignore . Chociaż ignorowanie składające się z prostych globusów powinno być wykonalne w zwykłym!
jako nie? Być może rozszerzone globowanie poradzi sobie z tą sytuacją. O Doublestar bash sobie z tym poradzishopt -s globstar
.