Backup de archivos que no estan en un repo GIT

Backup de archivos que no estan en un repo GIT

Recientemente me surgió la necesidad de optimizar el espacio requerido para los backups de mi equipo de trabajo. Principalmente son sitios web y actualmente volcaba todas las carperas de proyectos a otro disco y a Dropbox, pero Dropbox tiene un grave problema de rendimiento indexando gran cantidad de archivos.

Analizando el proceso de backup y hablando con otros programadores sobre su forma de hacer backups, me di cuenta que una parte del problema ya la tenia resuelta de antemano: GIT

Ya estoy usando git en los proyectos, y esto quiere decir que todo el contenido del repo ya esta salvaguardado en el servidor (Bitbucket o Github en mi caso) y en mis otros equipos de trabajo, por lo que sólo me quedaba resolver la otra parte del problema: los archivos que no estan en el repo, por ejemplo, en el caso de los Drupales la carpeta files, en la que estan los archivos subidos desde el backend y que no tiene sentido que esten en el repo.

Pues, despues de haber presenciado la charla de Félix Gómez sobre creación de apps de linea de comandos en PHP (https://www.youtube.com/watch?v=mGNgT6y_8NY), me lancé a crear la mia para hacer esta tarea.

La app por el momento es muy sencilla. Dado un directorio de partida y un directorio de destino, busca en el directorio de partida todas las carpetas que contengan un repo git y consulta todos los archivos que estan en el repo, esa lista de archivos se almacena en un archivo de texto temporal que posteriormente se pasa como parametro de un rsync en la opcion –exclude-list de forma que rsync no realize la copia de esos archivos.

Tambien he añadido la opción –cvs-exclude para que rsync ignore los archivos propios de git, como por ejemplo la carpeta .git

Con esta sencilla herramienta que he subido a un repo publico https://github.com/sergiocarracedo/backup-tools por si alguien quiere probar o aportar sus ideas, tengo resuelto el problema de los backups.

Como to-dos de esta herramienta, esta el optimizar ese exclude list ya que puede generarse un archivo de varios megas, el crear un segundo comando para consultar que repos tienen cambios sin comitear, etc….