Rsync 文件夹,而 --exclude-from'ing .gitignore 文件在不同深度

Jef*_*ard 9 git rsync

所以我正在尝试使用命令来 rsync 具有如下结构的源文件夹:

- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore
Run Code Online (Sandbox Code Playgroud)

第一个 .gitignore 将忽略一系列文件。典型的东西。第二个将如下所示:

*
!.gitignore
Run Code Online (Sandbox Code Playgroud)

当您想签入一个目录中没有任何文件时使用此技术。整个目录中可能还有更多 .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 文件,就好像它们在根目录下一样。有没有可能的方法来做到这一点,而不必为所有 .gitignores 进行 grep 并创建一个主文件,其中重写的路径都相对于根目录?

谢谢!

wur*_*tel 16

这告诉 rsync 在每个目录中查找文件.gitignore

rsync --filter='dir-merge,-n /.gitignore' [...]
Run Code Online (Sandbox Code Playgroud)

那应该做你想做的。

-n之后的dir-merge那个(指-)的文件指定唯一的排除和(n)的规则不被继承的子目录。