domingo, 5 de mayo de 2013

Script de backup


Buenas a todos,

 todos sabemos lo molesto que es perder información por falla en nuestro pendrive, o en nuestro disco duro, quizás por esto es que se han hecho mas común los servicios en la nube.

También se vuelve molesto y tedioso, cuando estas trabajando en el desarrollo de un nuevo sistema, y tienes que copiar todo el directorio en el pendrive, y luego cuando llegas a la casa, tener que copiar todo el directorio en el equipo de la casa; y después tener que hacer lo mismo pero en sentido inverso.

Bueno esto me estaba pasando recientemente con un proyecto en el que estoy trabajando, hago algunas cosas en la oficina, pero después en la noche, en la comodidad de mi casa, hago otro poco mas, y me parecía muy incomodo tener que copiar los directorios completos y responder las preguntas del sistema "Desea sobrescribir el contenido del escritorio?", es por eso, que dedique un poquito de tiempo, y escribí un script, que me permite, copiar el contenido de mi directorio de trabajo en el directorio que tengo sincronizado con Dropbox, y luego en la casa(u oficina) hacer lo inverso ( de dropbox a mi escritorio de trabajo).

En este script uso por supuesto a nuestro amigo rsync.

Aquí les dejo el código:


#!/bin/bash

diaHora=$(date +"%m-%d-%Y  %T")

ruta=$(pwd)

origen=$1
destino=$2
opciones="-aczuv --stats --delete --no-whole-file --exclude-from=$ruta/exclude-list "

if (($# < 2))
then
    echo "Número de parámetros incompleto. Se esperan dos, el directorio origen y el destino"
else
    if [ ! -d "$origen" ]
    then
        echo "El directorio de origen no existe o es invalido"
        exit
    fi
   
    if [ ! -d "$destino" ]
    then
        echo "El directorio destino no existe o es invalido"
        exit
    fi
   
    echo $diaHora >> log_rsync
    rsync $opciones $origen "$destino" >> log_rsync
fi


Se le pasa por parámetro es la ruta del directorio origen y el directorio destino. Como pueden ver se valida que el número de parámetros sean dos y que los directorios existan. En caso de que se cumpla todo lo anterior,  el comando rsync se ejecuta.

Entre las opciones, incluí una de exclusión, y esto se debe a que no quiero respaldar cosas que no me interesan, aquí les dejo un ejemplo:

*.git
.git/*
cache/*
logs/*


Aquí pueden notar, que no respaldo nada relacionado con git, ni el contenido del directorio cache y logs.

Recuerden, que para que el script pueda funcionar, deben darle permiso de ejecución.

Espero que les sirva de ayuda.

miércoles, 1 de mayo de 2013

Git al rescate de los programadores

Buenas noches, después de un tiempo sin escribir, aquí les traigo una nueva entrada.

En esta oportunidad, quiero tratar sobre el tema de control de versiones. Para los programadores, siempre es importante, tener respaldo constante del código que están desarrollando, y mas aun, tener respaldos sobre versiones de código en el cual estaban seguros que lo que estaba funcionaba bien. Bueno, esa es la razón de ser de los queridos programas que nos permiten el control de versiones, guardar las diferencias, entre el código antiguo y el nuevo, de forma tal, que en cualquier momento poder revisarla y regresar a la misma.

Existen varios programas que nos permiten eso, entre los mas sonados tenemos a subversion y git. En esta oportunidad hablaremos sobre git.

Para instalar git en nuestro querido linux, basta con ejecutar 

aptitude install git git-core

Una vez instalados los paquetes, nos ubicamos en el directorio donde queremos que se haga el control de versiones y se ejecuta: 

git init

Con esta instrucción, lo que se esta haciendo es crear el repositorio en blanco del proyecto que se va a manejar.

Luego, se ejecuta 

git add .

Con esto le estamos diciendo a git que agregue a todos los archivos y directorios ubicados en la posición actual, al repositorio.

Y con

git commit -a

Le indicamos, que ahora guarde en el repositorio todos los cambios que se han ocurrido entre lo que esta en el repositorio y lo que existe actualmente en los archivos. La "-a" me posiciona en mi editor para que escriba un comentario sobre lo que estoy almacenando.

Otro comando muy usado, es 

git status

esto permite ver si existe alguna diferencia entre lo que esta en los repositorios y lo que esta actualmente disponible.

Otros comandos usados, pero en esta oportunidad, para configurar a git

git config --global user.name "TU NOMBRE"
git config --global user.email tuemail@provedor.algo
git config --global core.editor tu_editor (vi, vim, emacs, nano, etc) 

Y siguiendo con las configuraciones, este que te voy a mostrar te permite ver como va tu configuración hasta ahora

git config --list

Como ultimo punto, si no desean incluir en el control de versiones ciertos archivos o directorios, ejemplo: txt, pdf, archivos de claves, etc., la solución es crear un archivo de nombre .gitignore (este debe estar en el directorio que estamos manejando). En el vamos a colocar, por ejemplo:

*/logs/*
*/cache/*
*.txt
*.sql

Lo anterior hace, que se no se maneje en el control de versiones el contenido que se encuentra en el directorio logs y cache (pero el directorio si se crea), tampoco son tomados por el controlador de versiones los archivos terminados en txt y sql.

Algo mas que es de mucha ayuda e importancia, es el manejo de ramificaciones, es decir, por defecto se crea y se trabaja en la rama master ( esto lo podemos saber ejecutando el comando git branch), pero en caso de que queramos una nueva rama, digamos para hacer pruebas, la creamos con el comando git brach prueba, con esto hemos creado la rama prueba. 

Ahora para cambiarse a esa rama ejecutamos el comando git checkout prueba. Todas las modificaciones que hagamos ahora en los archivos que están bajo el control de versiones, serán visibles solo en la rama prueba. Digamos que el código que estábamos probando funciona bien y esta estable, bueno podemos pasarlo a la rama master ejecutando

 git checkout master
 git merge prueba




En caso de que se quiera hacer un roolback:

 git log (obtenemos el id del commit)
 git reset --hard id_commit



En caso de que necesiten mas información, les recomiendo la pagina
http://git-scm.com/
http://www.maefloresta.com/portal/es/git.es
tienen mucha información.