Pasta Rsync enquanto arquivos --exclude-from'ing .gitignore em diferentes profundidades

8

Então, eu estou tentando trabalhar em um comando para rsync uma pasta de origem com uma estrutura como esta:

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

O primeiro .gitignore teria uma série de arquivos ignorados. Coisas típicas. O segundo seria semelhante ao seguinte:

*
!.gitignore

Essa técnica é usada quando você deseja fazer check-in em um diretório com nenhum dos arquivos dentro. Também pode haver mais .gitignores em todo o diretório - este é apenas um cenário. Portanto, minha pergunta é a seguinte: É possível fazer o rsync interpretar todos os .gitignores em relação ao diretório em que estão?

Minha tentativa inicial foi a seguinte:

  1. Glob todos os .gitignores no diretório
  2. Comando Build que se parece com:

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

No entanto, isso não funcionou como esperado para mim. Tudo está sendo ignorado porque está lendo todos os arquivos .gitignore como se estivessem na raiz. Existe alguma maneira possível de fazer isso sem ter que grep para todos os .gitignores e criar um arquivo mestre com caminhos reescritos, todos relativos ao diretório raiz?

Obrigado!

Jeff Howard
fonte

Respostas:

15

Isso diz ao rsync para procurar em cada diretório um arquivo .gitignore:

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

Isso deve fazer o que você quer.

O -ndepois que os dir-mergemeios de que ( -) o arquivo especifica apenas exclui e ( n) regras não são herdados por subdiretórios.

Wurtel
fonte
Essa foi uma ótima resposta. Obrigado. Eu marcaria você com +1, se pudesse.
Jeff Howard