Папка Rsync, в то время как --exclude-from'ing .gitignore файлы на разных глубинах

8

Поэтому я пытаюсь работать с командой для rsync исходной папки со структурой, например, так:

- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore

Первый .gitignore будет игнорировать ряд файлов. Типичные вещи. Второй будет выглядеть следующим образом:

*
!.gitignore

Этот метод используется, когда вы хотите проверить каталог, в котором нет ни одного файла. В каталоге также может быть больше .gitignores - это только один сценарий. Поэтому мой вопрос заключается в следующем: можно ли заставить rsync интерпретировать все .gitignores относительно каталога, в котором они находятся?

Моя первая попытка была следующей:

  1. Glob все .gitignores в каталоге.
  2. Команда построения, которая выглядит примерно так:

rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]

Однако, это не сработало, как ожидалось для меня. Все игнорируется, потому что он читает все файлы .gitignore, как будто они находятся в корне. Есть ли какой-нибудь возможный способ сделать это без необходимости использовать grep для всех .gitignores и создать один мастер-файл с переписанными путями относительно корневого каталога?

Спасибо!

Джефф Ховард
источник

Ответы:

15

Это говорит rsync искать файл в каждом каталоге .gitignore:

rsync --filter='dir-merge,-n /.gitignore' [...]

Это должно делать то, что вы хотите.

-nПосле dir-mergeозначает , что ( -) файл , который определяет только исключает и ( n) правила не наследуются подкаталогами.

wurtel
источник
Это был отличный ответ. Спасибо. Я бы +1 тебе, если бы мог.
Джефф Ховард