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$
(Mercurial эквивалент Git /target/
) не распознается rsync как регулярное выражение. И, похоже, ничего не работает для Subversion, для которой вам придется разобрать .svn/dir-prop-base
рабочую копию 1.6 или более ранней версии и в ужасе вскинуть руки для рабочей копии 1.7 или более поздней версии.
:-
именно значит? Что означает двоеточие? Что за черта?
check-ignore
подкоманду, которая может справиться с тяжелой работой по синтаксическому анализу различных «игнорируемых» файлов, если вы хотите использовать опцию «генерировать список всех не игнорируемых файлов». В моем ответе подробно описано, как это сделать.