pasta Rsync enquanto --exclui-dos arquivos .gitignore em diferentes profundidades

6

Estou tentando trabalhar em um comando para rsync uma pasta de origem com uma estrutura assim:

- 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 parecido com o seguinte:

*
!.gitignore

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

Minha tentativa inicial foi a seguinte:

  1. Glob todos os .gitignores no diretório.
  2. Criar um comando que se pareça com algo:

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 eles estivessem na raiz. Existe alguma maneira possível de fazer isso sem ter grep para todos os .gitignores e criar um arquivo mestre com todos os caminhos reescritos em relação ao diretório raiz?

Obrigado!

    
por Jeff Howard 18.11.2014 / 01:25

1 resposta

10

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

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

Isso deve fazer o que você quer.

O -n após o dir-merge significa que ( - ) o arquivo especifica apenas exclusões e ( n ) regras não são herdadas por subdiretórios.

    
por 18.11.2014 / 09:03

Tags