
Então, estou tentando trabalhar em um comando para sincronizar novamente 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 ficaria assim:
*
!.gitignore
Esta técnica é usada quando você deseja fazer check-in de um diretório sem nenhum dos arquivos dentro. 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 com que o rsync interprete todos os .gitignores relativos ao diretório em que estão?
Minha tentativa inicial foi a seguinte:
- Coloque todos os .gitignores no diretório.
- Comando de construção semelhante a:
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 todos os arquivos .gitignore estão sendo lidos como se estivessem na raiz. Existe alguma maneira possível de fazer isso sem precisar usar o grep para todos os .gitignores e criar um arquivo mestre com caminhos reescritos, todos relativos ao diretório raiz?
Obrigado!
Responder1
Isso diz ao rsync para procurar um arquivo em cada diretório .gitignore
:
rsync --filter='dir-merge,-n /.gitignore' [...]
Isso deve fazer o que você quiser.
O -n
depois de dir-merge
significa que ( -
) o arquivo especifica apenas exclui e ( n
) as regras não são herdadas por subdiretórios.