Ich habe einen Befehl find, der Dateien in meinem Projekt anzeigt:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Wie kann ich die Dateien filtern, damit nicht die Dateien in .gitignore angezeigt werden?
Ich dachte, dass ich benutze:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
Aber .gitignore-Dateien können Glob-Muster haben (auch funktioniert es nicht mit Pfaden, wenn sich die Datei in .gitignore befindet). Wie kann ich Dateien basierend auf Mustern filtern, die möglicherweise Globs haben?
find-sh {} +
am Ende?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
zum BeispielEs gibt einen Git-Befehl, um genau dies zu tun: z
Wie Sie angegeben haben, werden die meisten normalen Grep-Optionen mit einem einfachen Grep ausgeführt, es werden jedoch
.git
keine Dateien oder Ordner in Ihrer.gitignore
Datei durchsucht .Weitere Einzelheiten finden Sie unter
man git-grep
Submodule:
Wenn Sie andere Git-Repos in diesem Git-Repo haben (diese sollten sich in Submodulen befinden), können Sie das Flag auch
--recurse-submodules
zum Suchen in den Submodulen verwendenquelle
Verwenden Sie, um Dateien anzuzeigen, die sich in Ihrer Kasse befinden und von Git verfolgt werden
Dieser Befehl bietet eine Reihe von Optionen zum Anzeigen, z. B. zwischengespeicherte Dateien, nicht verfolgte Dateien, geänderte Dateien, ignorierte Dateien usw. Siehe
git ls-files --help
.quelle
git ls-files
, glaube aber nicht, dass es die Möglichkeit gibt, nicht verfolgte Dateien anzuzeigen. Welche?-o
(andere). ZBgit ls-files -o -X .gitignore
.gitignore
.git ls-files
./foo.txt aus, währendfind
sie ./Foo.txt ausgebenSie können ein Array verwenden, in dem Bash Glob ausgeführt wird.
Dateien wie diese haben:
Und eine
ignore
Datei wie diese zu habenVerwenden von
Wird dazu führen:
Sie können diese Daten dann mit einer beliebigen Technik bearbeiten.
Ich persönlich bevorzuge so etwas:
quelle
gitignore
ist eine Obermenge vonbash
Glob, die Sie für so etwas wie!file*
!file*
? Als Glob-Muster in Ignorierdatei oder als Dateiname?gitignore
Akzeptieren Sie!file*
file
**
.gitignore
Es gibt eine Reihe von Funktionen, die möglicherweise nicht so einfach direkt in Bash zu implementieren sind: git-scm.com/docs/gitignore . Obwohl Ignorieren, die nur aus einfachen Globs bestehen, in einfachem Bash ohne awk oder so machbar sein sollten!
als nicht? Möglicherweise kann Extended Globing mit dieser Situation umgehen. Über Doublestar kann Bash damit umgehenshopt -s globstar
.