Rsync включає в себе чудовий варіант --cvs-exclude
"ігнорувати файли так само, як це робить CVS", але CVS вже застаріли роками. Чи є якийсь спосіб зробити так само виключення файлів, які сучасні системи контролю версій (Git, Mercurial, Subversion) ігнорували б?
Наприклад, у мене є багато проектів Maven, перевірених у GitHub. Зазвичай вони включають в себе .gitignore
щонайменше список target
, каталог за замовчуванням Maven build (який може бути присутнім на верхньому рівні або в підмодулях). Оскільки вміст цих каталогів повністю одноразовий, і він може бути набагато більшим, ніж вихідний код, я хотів би виключити їх при використанні 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
підкоманда, яка може вирішувати важку роботу з розбору різних «ігнорувати» файлів, якщо ви хочете перейти до параметра «створити список усіх неігнорованих» файлів. Моя відповідь тут дає детальну інформацію про те, як це зробити.