sábado, abril 07, 2007

Subversion en Windows

Subversion es un sistema para el control de codigo fuente, es decir ayuda al manejo y control de control de archivos y directorios que son colocados en un repositorio que se encarga de registrar cada cambio realizado en ellos, con lo cual nos es posible recuperar una version anterior de algun archivo, o revisar y auditar la historia de cambios ocurridos, la forma en como Subversion maneja la historia es mediante la asignacion de un numero de revision en cada cambio atomico - es decir en cada cambio de uno o un grupo de archivos y/o directorios -.

El repositorio es posible accederlo de forma local (file://myrepositorio) o a traves de la red (svn://myrepositorio) y su mecanismo de seguridad nos ayuda a controlar quien tiene acceso al repositorio, ya sea de solo lectura o con permiso de escritura.

La forma en como el repositorio es organizado por omision, consiste es tres directorios que nos ayudan a llevar una organizacion de nuestro codigo fuente:

Trunk: Este directorio se utiliza para colocar nuestra version de codigo fuente mas actual, es donde generalmente se colocan los archivos de codigo fuente con los que estamos trabajando, por ende contiene la version mas actual de nuestro programa.

Branches: Hay ocaciones que es necesario realizar algunas pruebas con nuestro codigo - por ejemplo agregar funcionalidad que puede o no concretarse en la version final -, pero que no queremos que se vea afectada por el desarrollo normal de la aplicacion o bien, con nuestra pruebas no queremos afectar el desarrollo normal de la aplicacion, en esos casos podemos hacer una copia desde el Trunk para nuestra copia de trabajo, despues si los cambios realizados en nuestra "branch" nos satisface, podemos sincronizarlos con el Trunk o viceversa, podemos sincronizar cambios desde el Trunk con nuestro "branch".

Tags: Finalmente cuando liberamos alguna version de nuestra aplicacion, hacemos una copia del codigo fuente del Trunk que compone nuestra version de la aplicacion y la copiamos al directorio Tags, de esa forma podemos identificar plenamente el codigo fuente del cual se compilo una version especifica de nuestra aplicacion, mientras que en Trunk se puede continuar con el desarrollo de la proxima version.

Repositorio
-------> Trunk
----------------> Miprograma ( <- lugar donde ocurren los cambios mas actuales a nuestro codigo fuente )
-------> Branches
----------------> Miprograma_Mario_Prueba ( <- Copia de alguna version del Trunk para pruebas personales )
-------> Tags
----------------> Miprograma_V1.0 ( <- Copia del Trunk del codigo que compone la version 1.0 )
----------------> Miprograma_V1.1 ( <- Copia del Trunk del codigo que compone la version 1.1 )

Para trabajar con el codigo fuente del repositorio, es necesario realizar una copia, por ejemplo del Trunk, a nuestro disco duro local, la cual permanece bajo el control de Subversion, en esta copia podemos realizar nuestros cambios, y cuando esten completos, estos se envian al servidor de Subversion para que se registren en el repositorio. Es imprtante mencionar que al realizar la copia local, los archivos no tienen candado que limiten a otros programadores copiar los mismo archivos a sus pcs, lo cual permite a mas de un programador trabajar con los mismos archivos almismo tiempo.

Si bien esto es una gran ventaja, tambien esta propenso a conflictos, por ejemplo si dos programadores copian el mismo archivo del Trunk a sus disco duro, y los dos trabajan en cambios sobre el, pero uno de los programadores envia sus cambios al servidor de Subversion antes que el otro, el segundo va a recibir posiblemente un error indicando que el archivo fue modificado en el servidor, por lo cual es necesario sincronizar el nuevo archivo del servidor con la copia local. En algunos de los casos el mismo Subversion va a ser capaz auto sincronizar los cambios entre los dos archivos, en otras ocaciones el programador va a tener que indicarle a Subversion como sincronizar los cambios.

Si bien Subversion ayuda al manejo de codigo fuente en un equipo de desarrolladores, eso no implica que si se es un desarrollador unico no se pueda usar Subversion, definitivamente si se realiza desarrollo es importante el contar con algun tipo de control de codigo fuente, que nos ayude a manejar el codigo, a organizarlo, a comentar y poder revisar cambios realizados, y sobre todo que nos permita "regresar en el tiempo" y rescatar, si se requiere, el codigo fuente como estaba antes de algun cambio que causo algun problema.

La siguiente guia de como instalar Subversion en Windows la tome y la traduje de aqui.

Obtener los programas necesarios

  • Es necesario descargar la version mas reciente de Subversion para Windows
  • Para configurar que Subversion se ejecute como un servicio en Windows es necesario descargar este archivo.
  • Finalmente y de manera opcional podemos descargar una herramienta grafica que nos ayude a manejar el repositorio, una de ellas puede ser TortoiseSVN que se integral al Windows Explorer o Ankhsvn que se integra al IDE de Visual Studio

Instalar Subversion

Solo es necesario ejecutar el instalador y listo, adicionalmente va a ser necesario agregar el directorio de instalacion a nuestra variable de ambiente PATH y opcionalmente configurar notepad u otro editor de texto como el editor por omision de Subversion.

Para agregar el path de Subversion a la variable de ambiente PATH solo es necesario agregar la linea %programfiles%\subversion\bin

Para indicar que el notepad va a ser el editor por omision de Subversion es necesario agregar la variable de ambiente SVN_EDITOR apuntandola a c:\windows\notepad.exe

 Creando un repositorio

Para crear un repositorio en una ventana de MS-DOS ejecutamos el siguiente comando

svnadmin create "c:\Documents and Settings\Subversion Repository"

Despues es necesario modificar nuestro archivo /conf/svnserve.conf para indicar que usuarios anonimos pueder ver el codigo fuente, solo usuarios autentificados pueden realizar cambios y que nuestro archivo de seguridad se va a llamar passwd.

[general]
anon-access = read
auth-access = write
password-db = passwd

En el archivo /conf/passwd damos de alta a los usuarios y sus password de la siguiente forma:

[users]
harry = harryssecret
sally = sallyssecret

Nota: El directorio conf se encuentra dentro del directorio que creamos para nuestro repositorio en nuestro caso fue: "c:\Documents and Settings\Subversion Repository"


Probar que nuestro repositorio trabaja


Para poder probar nuestro repositorio es necesario iniciar el servidor de Subversion para esto ejecutamos la siguiente instruccion desde una ventana de MS-DOS

svnserve --daemon --root "C:\Documents and Settings\Subversion Repository"

Despues creamos un directorio en nuestro repositorio

svn mkdir svn://localhost/trunk/myproject

Una ventana de notepad aparecera, esta ventana ponemos algun comentario que nos ayude a recordar el porque del cambio en el repositorio, en nuestro caso del porque de la creacion del directorio. Estos comentarios son importantes ya que quedan relacionados con los cambios realizados en el repositorio y son de gran utilidad cuando se revisa el historia del cambios ya que nos ayudan a comprender el porque de los mismos.


Hay que colocar nuestro comentario y guardar el archivo de texto con el nombre por omision.


Acto seguido se nos va a preguntar por nuestras credenciales de Subversion

Authentication realm:  0f1a8b11-d50b-344d-9dc7-0d9ba12e22df
Password for 'Administrator': *********
Authentication realm: 0f1a8b11-d50b-344d-9dc7-0d9ba12e22df
Username: sally
Password for 'sally': ************

Committed revision 1.

Una vez que las proporcionemos vamos a ver el mensaje Committed revision 1, el cual indica que nuestro cambio fue guardado con el numero de revision 1.


Iniciar el servidor de Subversion como un servicio de Windows


Para detener nuestro servidor de Subversion, en la ventana de MS-DOS donde se esta ejecutando es necesario presionar CTRL+C, despues hay que copiar el archivo SNVService.exe descargado de aqui en el directorio de instalacion de Subversion subversion\bin, finalmente hay que configurar el servicio para que apunte a nuestro repositorio y se inicie automaticamente con el siguiente comando

svnservice -install --daemon --root "C:\Documents and Settings\Subversion Repository"
sc config svnservice start= auto
net start svnservice

Lo unico que resta es probar que nuestro servicio funciona con el siguiente comando

svn ls svn://localhost/trunk

El cual nos debe de mostra nuestro directorio myproject que creamos anteriormente.


Herramientas graficas para el manejo del repositorio


TortoiseSNV se integra al shell de Windows Explorer, permitiendonos manejar de forma grafica el repositorio de SVN. Por cierto aqui hay informacion de como integrar TortoiseSVN dentro del IDE de Visual Studio




Ankhsvn es otra herramientra grafica que se integra al IDE de Visual Studio, y tambien permite el manejo grafico de repositorio.




Recursos adicionales


Como recursos adicionales para conocer mas acerca de subversion, esta disponible el libro gratuito "Version Control with Subversion". El sitio de TortoiseSVN tambien tiene informacion interesante.


Conclusion


Como mencione anteriormente no importa si se es un equipo de programadores o si se es un programador unico, es una buena practica el contar con un control de codigo fuente. El lo personal utilizo Subversion desde hace 2 años y me ha sido de gran utilidad cuando me ha sido necesario investigar cambios realizados en el pasado, o para mantener el codigo de mi version estable de un programa, mientras cuento con otra copia del codigo fuente de la version sobre la cual estoy trabajando.

No hay comentarios.: