Папка rsync при исключении файлов .gitignore на разных глубинах

Папка rsync при исключении файлов .gitignore на разных глубинах

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

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

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

*
!.gitignore

Этот метод используется, когда вы хотите проверить каталог, в котором нет ни одного файла. Также может быть больше .gitignores по всему каталогу — это только один сценарий.Итак, мой вопрос таков: возможно ли заставить rsync интерпретировать все .gitignores относительно каталога, в котором они находятся?

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

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

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

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

Спасибо!

решение1

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

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

Это должно сделать то, что вам нужно.

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

Связанный контент