
Así que estoy intentando 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 típicas. El segundo quedaría así:
*
!.gitignore
Esta técnica se utiliza cuando desea registrar un directorio que no tiene 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 la siguiente: ¿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:
- Coloque todos los .gitignores en el directorio.
- 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 esperaba para mí. Todo se ignora porque lee 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 relativas al directorio raíz?
¡Gracias!
Respuesta1
Esto le dice a rsync que busque un archivo en cada directorio .gitignore
:
rsync --filter='dir-merge,-n /.gitignore' [...]
Eso debería hacer lo que quieras.
Después -n
de dir-merge
significa que ( -
) el archivo especificado solo excluye y ( n
) las reglas no son heredadas por los subdirectorios.