
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:
- Glob alle .gitignores im Verzeichnis.
- 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 -n
nach dem dir-merge
bedeutet, dass ( -
) die Datei nur Ausschlüsse angibt und ( n
) Regeln nicht an Unterverzeichnisse vererbt werden.