Wie füge ich rekursiv Dateien nach einem Muster (oder Glob) hinzu, das sich in verschiedenen Verzeichnissen befindet?
Zum Beispiel möchte ich A/B/C/foo.java
und D/E/F/bar.java
(und mehrere andere Java-Dateien) mit einem Befehl hinzufügen :
git add '*.java'
Leider funktioniert das nicht wie erwartet.
git
glob
filepattern
Michel Krämer
quelle
quelle
.java
Dateien in Ihrem aktuellen Verzeichnis haben, stoßen Sie möglicherweise auf die komplizierte Platzhalterbehandlung zwischen bash und dem msys-Befehlszeilen-Helfer . Ich bin mir nicht sicher über eine Lösung. Sie können mehrere Anführungszeichen-Ebenen ausprobieren:git add '"*.java"'
(Die einfachen Anführungszeichen werden von bash verwendet , um die Glob-Erweiterung zu verhindern. Die doppelten Anführungszeichen werden von der msys-Ebene verwendet, um die Glob-Erweiterung zu verhindern.)git add *.java
funktioniert für mich (auf Powershell mit GitHub Client)Antworten:
Die Antwort von Sergio Acosta ist wahrscheinlich die beste Wahl, wenn einige der hinzuzufügenden Dateien möglicherweise noch nicht nachverfolgt wurden. Wenn Sie sich auf Dateien beschränken möchten, die git bereits kennt, können Sie sie
git-ls-files
mit einem Filter kombinieren :Git bietet keine ausgefallenen Mechanismen, um dies selbst zu tun, da es sich im Grunde um ein Shell-Problem handelt: Wie erhält man eine Liste von Dateien, die als Argumente für einen bestimmten Befehl bereitgestellt werden sollen?
quelle
git ls-files -co --exclude-standard | grep '\.java$' | xargs git add
Sie können
git add [path]/\*.java
Java-Dateien aus Unterverzeichnissen hinzufügen,z
git add ./\*.java
. B. für das aktuelle Verzeichnis.Aus der
git add
Dokumentation :quelle
Mit
zsh
Sie laufen:und alle Ihre
*.java
Dateien werden rekursiv hinzugefügt.quelle
zsh
Shell für Fenster gibt ... Sie werden sich einen Gefallen tun, wenn Sie sie anstelle von Bash verwenden, imho.ls
).Ein bisschen abseits des Themas (nicht speziell mit Git verbunden), aber wenn Sie unter Linux / Unix arbeiten, könnte eine Problemumgehung sein:
Und wenn Sie Pfade mit Leerzeichen erwarten:
Aber ich weiß, dass Sie nicht genau danach gefragt haben.
quelle
Sergeys Antwort (nicht gutschreiben) funktioniert:
mit einem neuen git:
Dateien für den Test:
Git-Status:
Hinzufügen von * .txt:
Aktualisierter Status:
quelle
Wenn Sie Ihre Dateien bereits verfolgen und Änderungen daran vorgenommen haben und sie nun anhand eines Musters selektiv hinzufügen möchten, können Sie das
--modified
Flag verwendenWenn Sie beispielsweise nur die CSS-Änderungen zu diesem Commit hinzufügen möchten, können Sie dies tun
Sehen Sie
man git-ls-files
für mehr Flaggenquelle
Einfach benutzen
git add *\*.java
. Dadurch werden alle Java-Dateien im Stammverzeichnis und in allen Unterverzeichnissen hinzugefügt.quelle
Hinzufügen einer Windows-Befehlszeilenlösung, die noch nicht erwähnt wurde:
quelle
Ich wollte nur Dateien hinzufügen, die eine bestimmte Zeichenfolge hatten, basierend auf
git status
:git status | grep string | xargs git add
und konnte dann
git commit -m 'commit msg
alle geänderten Dateien mit "string" im Titel der Datei festschreibenquelle
Wie unter " Git: Wie füge ich rekursiv alle Dateien in einem Verzeichnis-Teilbaum hinzu, die einem Glob-Muster entsprechen? " Erwähnt, wenn
'*.java'
ja, lassen Sie Ihr Pathspec-Globbing (wie ) richtig maskieren oder zitieren , dann ja, Git hinzufügen'*.java'
Git 2.13 (Q2 2017) verbessert das für interaktives Hinzufügen:
Siehe Commit 7288e12 (14. März 2017) von Jeff King (
peff
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 153e0d7 , 17. März 2017)Historisch gesehen war die von "
diff-index
" unterstützte Pfadspezifikationssprache schwächer, aber das ist nicht mehr der Fall.quelle
Setzen Sie die Zeile in ~ / .gitconfig
[alias] addt = !sh -c 'git ls-files | grep \"\\.$1*\" | xargs git add' -
Wenn Sie alle geänderten Java-Dateien hinzufügen möchten, können Sie einfach:
git addt java
Wenn Sie alle geänderten Python-Dateien hinzufügen möchten, können Sie Folgendes tun:
git addt py
quelle