rsync исключить в соответствии с .gitignore & .hgignore & svn: ignore like --filter =: C

Rsync включает в себя отличный вариант--cvs-exclude «игнорировать файлы так же, как это делает CVS», но CVS уже давно устарела. Есть ли способ сделать так, чтобы он также исключал файлы, которые игнорировались бы современными системами контроля версий (Git, Mercurial, Subversion)?

Например, у меня есть много проектов Maven, извлеченных из GitHub. Обычно они включают.gitignore перечисление по крайней мереtargetкаталог сборки Maven по умолчанию (который может присутствовать на верхнем уровне или в подмодулях). Поскольку содержимое этих каталогов полностью одноразовое и может быть намного больше исходного кода, я бы хотел исключить их при использовании rsync для резервного копирования.

Конечно, я могу явно--exclude=target/ но это случайно подавит несвязанные каталоги, которые просто названыtarget и не должны игнорироваться.

И я мог бы предоставить полный список абсолютных путей для всех имен файлов и шаблонов, упомянутых в любом.gitignore, .hgignore, или жеsvn:ignore свойство на моем диске, но это будет огромный список, который должен быть создан каким-то сценарием.

Так как rsync не имеет встроенной поддержки проверок VCS, кроме CVS, есть ли хороший прием для подачи им шаблонов игнорирования? Или какая-то система обратного вызова, в которой пользовательский сценарий может спросить, должен ли данный файл / каталог быть включен или нет?

Обновить: --filter=':- .gitignore' как предположил LordJavac, похоже, работает так же для Git, как--filter=:C делает для CVS, по крайней мере, на примерах, которые я нашел, хотя неясно, является ли синтаксис точным соответствием.--filter=':- .hgignore' не очень хорошо работает для Mercurial; например.hgignore содержащие строку, как^target$ (Ртутный эквивалент Git/target/) не распознается rsync как регулярное выражение. И кажется, что ничего не работает для Subversion, для которой вам придется разбирать.svn/dir-prop-base за рабочую копию версии 1.6 или более ранней, и с тревогой поднимите руки за рабочую копию версии 1.7 или более поздней.

Ответы на вопрос(10)

Ваш ответ на вопрос