
Итак, я пытаюсь разработать команду для rsync исходной папки со следующей структурой:
- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore
Первый .gitignore будет иметь ряд игнорируемых файлов. Типичное. Второй будет выглядеть следующим образом:
*
!.gitignore
Этот метод используется, когда вы хотите проверить каталог, в котором нет ни одного файла. Также может быть больше .gitignores по всему каталогу — это только один сценарий.Итак, мой вопрос таков: возможно ли заставить rsync интерпретировать все .gitignores относительно каталога, в котором они находятся?
Моя первая попытка была следующей:
- Удалить все .gitignores в каталоге.
- Команда сборки выглядит примерно так:
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
) правила не наследуются подкаталогами.