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!

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.


Esta fue una gran respuesta. Gracias. Te haría +1 si pudiera.
Jeff Howard
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.