webentwicklung-frage-antwort-db.com.de

git: Wie füge ich rekursiv alle Dateien in einem Verzeichnis-Teilbaum hinzu, die einem Glob-Muster entsprechen?

Ich habe mehrere .screen-Dateien in /xxx/documentation Und seinen Unterverzeichnissen, die bereits von Git verfolgt werden.

Nachdem ich viele dieser Bildschirmdateien geändert habe, führe ich - wie im ersten Beispiel in der Dokumentation zu git add documentation/\\*.screen Angegeben - git-add Aus, um diese Dateien bereitzustellen. Der Befehl schlägt jedoch fehl:

fatal: pathspec 'documentation/\ *. screen' hat keine Dateien gefunden

Ist mein Befehl schlecht oder hat git einen Fehler?

56

Es ist ein Fehler in der Dokumentation. Zitiere das Sternchen mit

$ git add documentation/\ *. screen

oder

$ git füge 'documentation/*. screen' hinzu

um das gewünschte Verhalten zu erreichen.

Wenn Sie stattdessen nur Dateien im aktuellen Verzeichnis hinzufügen möchten, verwenden Sie

$ git add * .screen

UPDATE: Ich habe ein Patch eingereicht, das das Problem behebt, jetzt behoben ab Version 1.6. 6.2.

59
Greg Bacon

Ich habe die akzeptierte Antwort ausprobiert, aber sie hat bei mir nicht funktioniert. Deshalb hier meine, nur für den Fall, dass jemand seine Arbeit erledigen möchte, ohne Zeit damit zu verschwenden, verschiedene Aspekte zu analysieren, die das Problem verursachen könnten:

find documentation -name "*.screen" | xargs git add -u

// Die Option -u zu git-add fügt dem Index nur die Dateien hinzu, die zuvor verfolgt und geändert wurden

17
Flueras Bogdan

Sie haben die Shell angewiesen, nach *.screen Zu suchen (dh genau diese Zeichenfolge - die nicht existiert - anstelle der von Ihnen gewünschten Zeichenfolge "alle Dateien, die mit .screen Enden. Lassen Sie die Zeichenfolge \\, damit die Shell die Dateinamenerweiterung für Sie durchführen kann.

4
Aaron Digulla

Das habe ich gerade für ein ähnliches Problem beim Hinzufügen aller Dateien in einem Verzeichnis verwendet:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Für die ursprüngliche Frage wäre der Befehl:

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Beachten Sie, dass es sich um den Fall handelt, dass ein vollständig angegebener Dateiname Leerzeichen enthält. Deshalb meine Antwort. Bearbeiten Sie den Teil vor dem ersten |, um verschiedene hinzuzufügende Dateien auszuwählen.

4
Barnaby Dawson

git add * .Java funktioniert bei mir so, dass alle Java Dateien rekursiv hinzugefügt werden

2
Jackie

versuchen

git add ./documentation/*.screen
1
kubi