Rsync-Ordner beim --exclude-from'ing von .gitignore-Dateien in unterschiedlichen Tiefen

Rsync-Ordner beim --exclude-from'ing von .gitignore-Dateien in unterschiedlichen Tiefen

Ich versuche also, einen Befehl zum Rsyncen eines Quellordners mit einer Struktur wie dieser zu entwickeln:

- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore

Die erste .gitignore-Datei würde eine Reihe von Dateien ignorieren. Typisches Zeug. Die zweite würde wie folgt aussehen:

*
!.gitignore

Diese Technik wird verwendet, wenn Sie ein Verzeichnis einchecken möchten, in dem sich keine der Dateien befindet. Es können auch mehrere .gitignores im gesamten Verzeichnis vorhanden sein – dies ist nur ein Szenario.Meine Frage ist also folgende: Ist es möglich, rsync dazu zu bringen, alle .gitignores relativ zu dem Verzeichnis zu interpretieren, in dem sie sich befinden?

Mein erster Versuch war der folgende:

  1. Glob alle .gitignores im Verzeichnis.
  2. Build-Befehl, der ungefähr so ​​aussieht:

rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]

Dies funktionierte bei mir jedoch nicht wie erwartet. Alles wird ignoriert, da alle .gitignore-Dateien so gelesen werden, als ob sie sich im Stammverzeichnis befänden. Gibt es eine Möglichkeit, dies zu tun, ohne nach allen .gitignores suchen zu müssen und eine Masterdatei mit neu geschriebenen Pfaden zu erstellen, die alle relativ zum Stammverzeichnis sind?

Danke!

Antwort1

Dies weist rsync an, in jedem Verzeichnis nach einer Datei zu suchen .gitignore:

rsync --filter='dir-merge,-n /.gitignore' [...]

Das sollte tun, was Sie wollen.

Das -nnach dem dir-mergebedeutet, dass ( -) die Datei nur Ausschlüsse angibt und ( n) Regeln nicht an Unterverzeichnisse vererbt werden.

verwandte Informationen