Rsync enthält eine raffinierte Option --cvs-exclude
zum "Ignorieren von Dateien auf die gleiche Weise wie CVS", aber CVS ist seit Jahren veraltet. Gibt es eine Möglichkeit, Dateien auszuschließen, die von modernen Versionskontrollsystemen (Git, Mercurial, Subversion) ignoriert werden?
Zum Beispiel habe ich viele Maven-Projekte von GitHub ausgecheckt. In der Regel enthalten sie .gitignore
mindestens eine Auflistung target
, das Standard-Maven-Build-Verzeichnis (das möglicherweise auf oberster Ebene oder in Submodulen vorhanden ist). Da der Inhalt dieser Verzeichnisse vollständig verfügbar ist und weitaus größer als der Quellcode sein kann, möchte ich sie bei der Verwendung von rsync für Sicherungen ausschließen.
Natürlich kann ich das explizit, --exclude=target/
aber das wird versehentlich nicht verwandte Verzeichnisse unterdrücken, die zufällig benannt werden target
und nicht ignoriert werden sollen.
Und ich konnte eine vollständige Liste der absoluten Pfade für alle Dateinamen und Muster erwähnten in jedem liefern .gitignore
, .hgignore
oder svn:ignore
Eigentum auf meiner Festplatte, aber das wäre eine riesige Liste, die durch irgendeine Art von Skript erzeugt werden müßte.
Gibt es einen guten Trick, um rsync ihre Ignoriermuster zuzuweisen, da es keine integrierte Unterstützung für VCS-Checkouts außer CVS gibt? Oder eine Art Rückrufsystem, bei dem ein Benutzerskript gefragt werden kann, ob eine bestimmte Datei / ein bestimmtes Verzeichnis enthalten sein soll oder nicht?
Update : --filter=':- .gitignore'
Wie von LordJavac vorgeschlagen, scheint es für Git genauso gut zu funktionieren wie --filter=:C
für CVS, zumindest bei den Beispielen, die ich gefunden habe, obwohl unklar ist, ob die Syntax genau übereinstimmt. --filter=':- .hgignore'
funktioniert nicht sehr gut für Mercurial; zB wird .hgignore
eine Zeile wie ^target$
(das Mercurial-Äquivalent von Git /target/
) von rsync nicht als regulärer Ausdruck erkannt. Und für Subversion scheint nichts zu funktionieren, für das Sie .svn/dir-prop-base
eine Arbeitskopie von 1.6 oder früher analysieren und für eine Arbeitskopie von 1.7 oder später bestürzt die Hände hochwerfen müssten .
:-
bedeutet genau? Was bedeutet der Doppelpunkt? Was zum Teufel?
check-ignore
Unterbefehl, der die harte Arbeit des Parsens der verschiedenen "Ignorieren" -Dateien bewältigen kann, wenn Sie die Option "Liste aller nicht ignorierten Dateien erstellen" verwenden möchten. Meine Antwort hier gibt Einzelheiten dazu.