Rsync comprend une option très pratique. --cvs-exclude
pour "ignorer les fichiers de la même manière que CVS", mais CVS est obsolète depuis des années. Existe-t-il un moyen de faire en sorte qu'il exclue également les fichiers qui seraient ignorés par les systèmes de contrôle de version modernes (Git, Mercurial, Subversion) ?
Par exemple, j'ai beaucoup de projets Maven extraits de GitHub. En général, ils comprennent un .gitignore
en énumérant au moins target
le répertoire de construction Maven par défaut (qui peut être présent au niveau supérieur ou dans les sous-modules). Étant donné que le contenu de ces répertoires est entièrement jetable et qu'il peut être beaucoup plus important que le code source, je voudrais les exclure lorsque j'utilise rsync pour les sauvegardes.
Bien sûr, je peux explicitement --exclude=target/
mais cela supprimera accidentellement des répertoires non liés qui s'appellent simplement target
et ne sont pas censés être ignorés.
Et je pourrais fournir une liste complète des chemins absolus pour tous les noms de fichiers et les modèles mentionnés dans n'importe quel fichier de la liste. .gitignore
, .hgignore
ou svn:ignore
sur mon disque, mais ce serait une liste énorme qui devrait être produite par une sorte de script.
Puisque rsync n'a pas de support intégré pour les extractions VCS autres que CVS, y a-t-il une bonne astuce pour lui fournir leurs modèles d'ignorance ? Ou une sorte de système de rappel par lequel on peut demander à un utilisateur script si un fichier/répertoire donné doit être inclus ou non ?
Mise à jour : --filter=':- .gitignore'
comme suggéré par LordJavac semble fonctionner aussi bien pour Git que --filter=:C
le fait pour CVS, du moins sur les exemples que j'ai trouvés, bien qu'il ne soit pas clair si la syntaxe est une correspondance exacte. --filter=':- .hgignore'
ne fonctionne pas très bien pour Mercurial ; par exemple, un fichier de type .hgignore
contenant une ligne comme ^target$
(l'équivalent Mercurial de Git /target/
) n'est pas reconnu par rsync comme une expression régulière. Et rien ne semble fonctionner pour Subversion, pour lequel vous devriez analyser .svn/dir-prop-base
pour une copie de travail 1.6 ou antérieure, et levez les mains en signe de consternation pour une copie de travail 1.7 ou ultérieure.