Dossier Rsync tout en --exclude-from'ing .gitignore fichiers à différentes profondeurs

8

J'essaie donc de travailler sur une commande pour rsync un dossier source avec une structure comme ceci:

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

Le premier .gitignore aurait ignoré une série de fichiers. Des trucs typiques. Le second ressemblerait à ceci:

*
!.gitignore

Cette technique est utilisée lorsque vous souhaitez archiver un répertoire sans aucun fichier à l'intérieur. Il peut également y avoir plus de .gitignores dans le répertoire - ce n'est qu'un scénario. Ma question est donc la suivante: est-il possible de faire interpréter par rsync tous les .gitignores par rapport au répertoire dans lequel ils se trouvent?

Ma première tentative a été la suivante:

  1. Globez tous les .gitignores dans le répertoire.
  2. Commande de construction qui ressemble à quelque chose comme:

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

Cependant, cela n'a pas fonctionné comme prévu pour moi. Tout est ignoré car il lit tous les fichiers .gitignore comme s'ils étaient à la racine. Existe-t-il un moyen possible de le faire sans avoir à rechercher tous les .gitignores et à créer un fichier maître avec des chemins réécrits tous relatifs au répertoire racine?

Merci!

Jeff Howard
la source

Réponses:

15

Cela indique à rsync de rechercher dans chaque répertoire un fichier .gitignore:

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

Cela devrait faire ce que vous voulez.

L' -naprès dir-mergesignifie que ( -) le fichier spécifie uniquement les exclusions et ( n) ne sont pas héritées par les sous-répertoires.

Wurtel
la source
Ce fut une excellente réponse. Je vous remercie. Je vous attribuerais +1 si je le pouvais.
Jeff Howard