Carpeta Rsync mientras --excluye-de'ing archivos .gitignore a diferentes profundidades

8

Así que estoy tratando de trabajar en un comando para sincronizar una carpeta de origen con una estructura como esta:

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

El primer .gitignore tendría una serie de archivos ignorados. Cosas tipicas. El segundo se vería así:

*
!.gitignore

Esta técnica se utiliza cuando desea registrar un directorio con ninguno de los archivos dentro. También puede haber más .gitignores en todo el directorio; este es solo un escenario. Entonces mi pregunta es esta: ¿es posible hacer que rsync interprete todos los .gitignores en relación con el directorio en el que se encuentran?

Mi intento inicial fue el siguiente:

  1. Glob todos los .gitignores en el directorio.
  2. Comando de compilación que se parece a:

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

Sin embargo, esto no funcionó como se esperaba para mí. Todo se está ignorando porque está leyendo todos los archivos .gitignore como si estuvieran en la raíz. ¿Hay alguna forma posible de hacer esto sin tener que buscar todos los .gitignores y crear un archivo maestro con rutas reescritas, todas relacionadas con el directorio raíz?

¡Gracias!

Jeff Howard
fuente

Respuestas:

15

Esto le dice a rsync que busque en cada directorio un archivo .gitignore:

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

Eso debería hacer lo que quieras.

El -ndespués de que los dir-mergemedios que ( -) El archivo especifica sólo excluye y ( n) reglas no se heredan por subdirectorios.

wurtel
fuente
Esta fue una gran respuesta. Gracias. Te haría +1 si pudiera.
Jeff Howard