Rsync inclut une option astucieuse --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 d'exclure é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 incluent .gitignore
au moins une liste target
, le répertoire de construction par défaut de Maven (qui peut être présent au niveau supérieur ou dans des sous-modules). Étant donné que le contenu de ces répertoires est entièrement jetable et qu'ils peuvent être beaucoup plus volumineux que le code source, je voudrais les exclure lors de l'utilisation de rsync pour les sauvegardes.
Bien sûr, je peux explicitement, --exclude=target/
mais cela supprimera accidentellement les répertoires non liés qui se trouvent juste être nommés 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 de motifs mentionnés dans tout .gitignore
, .hgignore
ou svn:ignore
bien sur mon disque, mais ce serait une énorme liste qui devrait être produit 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 donner leurs modèles d'ignorance? Ou une sorte de système de rappel par lequel un script utilisateur peut être demandé 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
pour CVS, du moins sur les exemples que j'ai trouvés, bien que l'on ne sache pas si la syntaxe correspond exactement. --filter=':- .hgignore'
ne fonctionne pas très bien pour Mercurial; par exemple, un .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 auriez à analyser .svn/dir-prop-base
une copie de travail 1.6 ou antérieure, et à lever les mains avec consternation pour une copie de travail 1.7 ou ultérieure.
:-
signifie exactement? Que signifie le côlon? Qu'est-ce que le tableau de bord?
check-ignore
sous-commande qui peut gérer le dur travail d'analyse des divers fichiers "ignorer", si vous voulez utiliser l'option "générer une liste de tous les fichiers non ignorés". Ma réponse ici donne des détails sur la façon de procéder.