Subversion, control de versiones con backup incluido

sábado, 16 de junio de 2007

Hola gentita latina, sé q con este post me estoy saliendo un poco del tema relacionado con el mundo de Rails, pero bueno, no quería dejar de compartir esto q aprendí ayer mismo; se trata de cómo poner en funcionamiento un servidor de versiones, subversion.

¿Y q es Subversion?

Subversion es un software de sistema de control de versiones de código abierto y gratuito.

Subversion maneja ficheros y directorios a través del tiempo. Hay un árbol de ficheros en un repositorio central. El repositorio es como un servidor de ficheros ordinario, excepto porque recuerda todos los cambios hechos a sus ficheros y directorios. Esto le permite recuperar versiones antiguas de sus datos, o examinar el historial de cambios de los mismos. En este aspecto, mucha gente piensa en los sistemas de versiones como en una especie de "máquina del tiempo".

Y a modo de ejemplo un poco mas relacionado a nuestro mundo, pues: "Imagínense q le escriben un bonito poema a su enamorada y pues antes de q se lo envíen, su bendita enamorada se porta mal o hace algo q no nos gusta y caray, nos hace molestar, entonces su poemita q estaban tan ilusionado de dárselo, lo sobrescriben y ponen cosas un poco feítas, rabiosas diremos. Pero como el amor es así de cambiante y para nada comprensible, pues de un día para el otro su enamorada hace algo bonito con el fin de ser disculpada y bueno, como somos tan pero tan buenos, pues la aceptamos y como ven, necesitaremos de nuevo nuestro poema", ¿pero hasta q me acuerde todo lo bonito q me había inspirado?, mejor hubiese sido q lo haya guardado en algún lado, ¿verdad?

¿Y para q utilizaría Subversion?

Pues con el fin de conservar información q varias veces es sobrescrita. Un buen ejemplo real es en el caso de ambientes de desarrollo de software:

Cualquier persona q alguna vez a desarrollado algún sistema, o sin ir tan lejos, en esos trabajos universitarios q te dicen: "hagan grupos y hagan este jueguito", pues sabrán q muchas personas detrás de un solo computador, el trabajo no se avanza, pero si lo hiciesen cada uno una parte y la unión de estas partes no fuese tan tedioso con el temor de "chancar" alguna parte importante, pues las cosas serian diferentes ¿verdad?

La solución para este problema es SUBVERSION.

¿De seguro solo corre en Linux?

No, un servidor Subversion puede ser instalado bajo Linux, Mac OSX o Windows. Así que no hay que preocuparse, hay de todos los sabores y colores. De hecho, puede ser instalado como un modulo de Apache (servidor web) o como un servicio independiente, accesible a través de varios protocolos (http://, https://, svn://,file:///, entre otros).

¿Algo mas que deba saber?

Sip, este sistema no solo controla cambios de archivos de texto (como .php, .as, .js, .css, .html, y cualquier otro que te imagines) sino también, es bastante efectivo con archivos binarios (como .fla, .jpg). Es una ventaja que tiene frente a CVS (una versión antigua q hacia lo mismo o se aproximaba).

Suena interesante ¿q necesito para comenzar?

Realmente, lo único que necesitas, tanto para el cliente como para el servidor son los binarios de este sistema, pues después, puedes utilizarlo desde la línea de comandos. Sin embargo, hay aplicaciones que ayudan a ejecutar los comandos de subversion desde una interface grafica. En fin, para nuestro ejemplo, necesitas:

  • Instalador de subversion para Windows: bajarlo de aquí
  • SVNService: bajarlo de aquí (es una herramienta para instalar subversion como un servicio de Windows).
  • TortoiseSVN: bajarlo de aquí, aplicación que se integra con Windows Explorer para manejar subversion.

Ya los tengo ¿y ahora q?

Bueno ahora si comienza lo bueno, lee bien y toma nota J

Para q sea un poco mas explicito imaginaremos q trabajamos con 3 maquinas

  • 1 maquina q hará el papel de Servidor de Versiones (*)
  • 2 maquinas q harán de clientes, estas subirán y bajaran los archivos q quieran (**)

(*) La maquina servidor puede estar corriendo winXP o win2k, no interesa, además puede ser también un cliente, es decir: subir y bajar archivos

(**) Ambas maquinas pueden estar corriendo winXP o también ser otros servers

En la maquina servidor:

  • Ejecuta el instalador de subversion, de seguro q no traerá mucho problema, solo da acepta todo lo q te diga.

  • ¡Ah! Cuando te pida donde quieres instalarlo, puedes ponerlo donde quieras, en mi caso lo me cree un directorio en la C:/,

  • Lo instale en la carpeta "c:/subversion/svn", y quedara algo así:

  • Si la instalación salió bien, abre una consola de Windows (el famoso CMD), y escribe: "svn help" debe de salirte una lista de comandos q puedes utilizar para operar el subversion.
  • Ojo, la carpeta "Repositorios" q ven allí, deben de crearla ustedes mismos, pues allí guardaremos todos los repositorios q queramos salvar (diferentes proyectos ps)
  • Ahora para levantar este servicio tenemos dos alternativas:
    • La primera es corriendo un comando en una consola de Windows (el famoso cmd)
    • Al dar enter veras q la ventana queda como colgada, no te preocupes, eso quiere decir q esta funcionando bien, estas corriendo el servicio manualmente.
    • Como viste esta alternativa no es tan buena q digamos, pues resulta un poco tedioso estar abriendo una ventana a cada nada uno quiera subir o bajar algo del servidor de versiones.
    • La segunda alternativa es correrlo como servicio del sistema operativo, para esto debes de descomprimir el archivo .zip q te bajaste

    • Dentro encontraras un solo archivo q nos servirá, "SVNservice.exe", este debes de copiarlo a la carpeta BIN de tu instalación del svn, mira el grafico:

    • Ahora q ya tenemos este archivo, pues debemos instalar el servicio para q corra en nuestro sistema operativo, así:

    • Con esto ya tenemos el servicio instalado y apuntando a nuestra carpeta donde se encuentran todos los repositorios.
    • Pero ojo, el servicio se instala como MANUAL con un estado STOP, así q debemos correrlo manualmente, o mejor aun si lo ponemos automático para q cada vez q el equipo se inicie también se inicie el servicio SVNservice

    • Así q no olviden de ponerlo automático (solo dale anti clic y entra a sus propiedades, lo demás ya es intuitivo)
    • Pero si quieres darte el trabajito de estar iniciándolo a cada nada, y no estar abriendo y cerrando esta ventanita de servicios, pues puedes hacerlo por línea de comando, así: C:/>net start svnservice <enter> y para detenerlo, así: C:/>net stop svnservice <enter>
  • Vamos bien, espero q aun me estés siguiendo.
  • Ahora lo único q nos falta hacer es decirle a nuestro servidorcito, quienes harán estas transacciones (los usuarios/los desarrolladores), fácil:
    • Para este ejemplo tomaremos un proyecto q lo llamaremos TEST, entonces debemos crear una carpeta con este nombre dentro de nuestra carpeta REPOSITORIOS, así:

    • Ya q estamos en este punto, de paso creemos otra carpeta con el nombre TEST_BACKUP, para q allí guardemos los backups q sacaremos a nuestro repositorio.
    • Ahora debemos de decirle a nuestro servidor q esta carpeta será un repositorio.
    • ¡Ups! , creo me olvide de instalar tortoiseSVN, bueno, instálalo, no te traerá ningún problema, instálalo donde quieras, es lo de menos.

    • Una vez q lo tengas instalado, pues haremos uso de algunas herramientas q tiene.
    • Dale anti clic sobre la carpeta TEST, y dale Repository-here, así:

    • Te aparecerá una ventana similar a la siguiente, déjala como esta, dale OK.

    • Veras q ahora se crearan un conjunto de carpetas dentro de Test, ojo, no debes de borrar o cambiar algún nombre dentro de esta.
    • Para decirle quienes trabajaran con este repositorio, debemos de crear pequeñas cuentas q nos servirán para dar un poquito mas de orden a este asunto transaccional.

    • Como vez en el grafico, debes de modificar los archivos svnserve.conf y passwd
    • Cambia todo su contenido con esto:
      • En el Fichero svnserve.conf
      • [general]
        # Solo acceso a usuarios autorizados.
        auth-access = write
        # Fichero de usuarios.
        password-db = passwd

      • Fichero passwd
      • [users]
        # listado de usuarios y password
      • Usuario1 = pass1
      • Usuario2 = pass2
    • Ojo, estos usuarios y contraseñas, no necesariamente deben ser usuario de maquina, o nombres registrados en el dominio, nada q ver, puedes inventarte cualquier nombre y cualquier contraseña, es solo para verificar al momento de hacer las transacciones, ¿vale?
    • Además como dato extra te digo, q cuando le das auth-access = write le estas diciendo q el permiso sea para poder escribir en los datos ya existentes, en pocas palabras, pues q podrás bajar sin contraseña, pero no podrás subir si no tienes una.
  • Ahora si, se acabo la chamba por parte del servidor, solo debemos hacer todo lo demás desde los clientes
  • En el cliente 1, por ejemplo, creemos una carpeta en el escritorio, con nombre Test_cliente1, y dale checkout,
    así:

  • Aparecerá una ventana así:

  • Debes de darle la dirección de tu servidor de versiones, puedes poner el nombre de la maquina servidor o la dirección IP, así como aparece en la imagen (esas XXX representan la maquina servidor), claro debes poner el nombre de tu repositorio (es este caso TEST), y como te darás cuenta también aparece el destino de donde se copiara o bajara toda la info existente en el server. Solo dale OK
  • Te aparecerá una imagen algo así:

  • Quiere decir q todo salió bien. Estas en la revisión 0, pues porque aun no se subió nada, entiendes.
  • Entonces estamos listos para subir cualquier cosa al servidor.
  • Por ahora solo créate un archivito de texto, q contenga algún comentario, algo así:

  • Una vez q lo tengas, solo tendrás q subirlo así:

  • Aparecerá una pantalla similar a esta, ponle algún comentario si es necesario, para q los demás sepan q estas subiendo al servidor (recomendable), solo dale OK.

  • Como es la primera q alguien esta subiendo algo al servidor, pues entonces deberás registrarte, así:

  • Recuerdas el usuario y contraseña q pusiste hace un momento en el servidor, en el archivo passwd para ser mas exactos. Pues esos debes de poner aquí
  • A continuación veras algo similar a esto:

  • Mira q ahora ya es la revisión 1, se agrego y se mando, todo ok hasta aquí.
  • Ahora solo falta q desde otra maquina diferente cliente 1, bajemos este archivo, lo modifiquemos y lo volvamos a subir. Pero este paso ya es sencillo, solo debes de crearte una carpeta, en este caso yo le puse Test_Cliente2 y darle un checkout, veras q aparecerá algo similar a esto:

  • Vez q ya se agrego el archivo q subimos desde la otra maquina, y mira también en q revisión estamos.
  • Ahora debemos pasar la prueba de fuego, modificarlo y volverlo a subir, y en la otra maquina (cliente 1), abrirlo y ver los cambios.

  • Así lo subimos, ojo: si nos pide usuario y contraseña, pues debemos poner nuestro user y pass q nos creamos anteriormente:

  • Ahora verán q la revisión a cambiado, es 2

  • Bien jugado, ahora actualicemos nuestra versión en la maquina 1 y veamos q cambios hicieron a nuestro archivo.
  • Acción: actualizo, revisión: 2, creo q todo va bien ¿verdad?
  • Abrámoslo:

  • Vieron q fácil es trabajar con esto. Pues q esperan pruébenlo y trabajen en equipo.

¿Y el Backup?

Bueno el backup es aun mas sencillo, solo es un script q copia toda la carpeta de repositorios/test a otra en este caso, repositorios/test_backup

Créense un archivo plano de extensión .bat y en el contenido pongan esto:

//------------------------------------------------------------------------------------------------------------------------------

rem borra el contenido del anterior backup
del "c:\(carpeta del backup)" /S /F /Q
rd c:\
(carpeta del backup) /S /Q
md c:\
(carpeta del backup)

rem backup en caliente
c:\(directorio_de_Svn)\bin\svnadmin.exe hotcopy c:\(carpeta del repositorio)\(carpeta del proyecto. xEj: test) c:\
(carpeta del backup)

//------------------------------------------------------------------------------------------------------------------------------

Bueno creo q con eso ya esta, sé q fue un poco larguito, pero de seguro q resultara, cualquier notita, consulta, o comentario solo escríbanme o comenten, ya nos vemos, sigan trabajando en equipo. ¡Ah! Sigan sobre rieles…

2 comentarios:

Unknown dijo...

Muchas gracias por este de tutorial, un 10.

Anónimo dijo...

My English communication is just not so super butI feel I realize every thing. Say thanks to u so much for that great blog site submit. I genuinely get pleasure from perusing it. I feel you are a absolute author. At this second extra ur web page to my favorites and can arrive once more to yor world-wide-web webpage. Hold up that wonder perform. Hope to determine additional soon.

--------------------------------------------
my website is
http://learnitalianlanguage.info

Also welcome you!