miércoles, 21 de septiembre de 2011

Curso de programación: Capítulo 12. Repositorios


Hola a todos...

Una cosa que en muchas ocasiones nos pilla desprevenidos en nuestro primer trabajo (se entiende que de programador) es el concepto de repositorio. A mi particularmente no me lo explicaron nunca en ninguna clase y tal vez es la cosa que más uso en mi dia a dia laboral.

Un repositorio es un lugar "virtual" donde guardamos gran cantidad de información susceptible de ser vista y tocada por mucha gente; en nuestro caso, proyectos de software. Es decir, vendria a ser algo así como un disco duro que está en un servidor donde copiamos nuestros archivos para que los demás los vean y de donde podemos bajarnos las cosas de las demás.

Hay muchos protocolos de repositorio (SVN,CVS,etc..) pero uno de los que más se usa  es el SVN. Para acceder a un repositorio se ha de tener un cliente de repositorio(un programa de gestión), nuevamente, hay muchos clientes, yo el que uso normalmente en casa es el TortoiseSVN . Vosotros usad el que queraís, hay muchos y lo importante al final es trabajar a gusto.

Vale, ok, ya se más o menos que es un repositorio y tengo el software para conectarme a el, y ahora que?. Pues nos conectamos al repositorio. Depende del cliente, pero normalmente para conectarte a un repostorio se ha de crear una carpeta vacia en nuestro disco duro , darle al botón derecho y darle a algo del tipo "CheckOut". al hacer esto nos pedirá la dirección del repositorio y usuario y password si es un repositorio restringido. Una vez hecho esto nos bajará el proyecto a nuestra carpeta.

Que acciones básicas se pueden realizar con el repositotio?
- CheckOut: Bajarte el proyecto del servidor a tu ordenador
- Update: Una vez el proyecto está bajado, podemos ir actualizando los últimos cambios que suben el resto de usuarios sin necesidad de bajar todo el proyecto.
- Commit: subir el proyecto al repositorio
- Compare: para comparar código del servidor con lo que tenemos
- revert: para eliminar nuestros cambios locales y quedarnos como al principio
- syncronizar: para gestionar multiples subidas desde diferentes ordenadores
- branch/tag : para generar diferentes versiones del proyecto
- switch: para cambiar de un versión a otra del proyecto

Estas acostumbran a ser las comunes, despues ya cada cliente puede montarselo de una manera u otra.


Que ventajas nos da usar un repositorio??
Si programas solo en casa, en proyectos de 1000 lineas de código, no te aconsejaria que usaras un repositorio, pero si trabajaras en un grupo de 50 personas distribuidas por todo el mundo con un código de 500k lineas , tu mismo verias que pasarse los cambios por mail no sería la mejor opción. :D
Aparte de la ventaja obvia de tener todo el código centralizado tenemos un conjunto de características que nos pueden resultar muy provechosas:
- Permisos: Hay una figura de administrador de proyecto que es el que da y quita permisos, esto quiere decir que no todo el mundo tiene por que poder hacer checkout ni mucho menos commit, reduciendo las subidas a un grupo de programadores experimentados (por ejemplo)
- Branches: el repositorio te permite crear diferentes versiones de tu código que pueden evolucionar por separado, por ejemplo : versión Linux , versión Windows , versión MAC y que haya diferentes grupos que trabajen en cada branch. Posteriormente estos branchs se pueden volver a juntar o no (por ejemplo, cuando es un branch de test)
- Comparación de código: Por defecto el repositorio guarda solamente las diferencias entre un commit y otro, esto significa que en todo momento se puede saber quien subió qué código , cuando y por que. si se detecta un fallo que apareció a partir de tal fecha se hace mucho más sencillo descubrir la raíz del problema.
- Revisión de código: La organización del repositorio está pensada para que la comunidad o un subgrupo de esta tenga que dar el visto bueno a un conjunto de cambios para que dichos cambios se hagan efectivos en la versión final. Esto en el fondo no es más que 100 ojos ven más que 2.

Ok, ya lo sé casi todo sobre repositorios, como me monto uno?? Pues la verdad, la mejor manera para mi gusto es lo que me recomendó killrazor en su momento : google code. No me meteré en como se gestiona, pero no es complicado y hay númerosos tutoriales por internet que lo explicarán mucho mejor que yo.

Finalmente, el resumen para los vagos que no quieren leerse toda esta parrafada :D
1. Bajate el tortoiseSVN
2. Crea un carpeta vacia en tu disco duro
3.Botón derecho SVN Checkout
4. Copia esto: https://lpgameengine.googlecode.com/svn/trunk/ donde te dice "URL of repository"
5. Dale al ok.

Si todo va bien se te tendría que bajar el proyecto, si no es así dimelo y lo miraremos.

Cualquier cosa que creais que falte, decidmelo y la incluiré o la explicaré de otra manera.

7 comentarios :

  1. Muy bueno Pako. Ahora tambien se usa mucho el git.hub.

    Saludos.

    ResponderEliminar
  2. Hola Pako.
    Ademas de los branches tambien estan los Tags. Un tag es una revision (un numero de revision), enlatado. Sirve para liberar o conservar un estado concreto de la aplicacion. Por ejemplo, podriamos hacer que la proxima release planeada incluya el sistema de recursos, managers y abra una ventana (solo es un ejemplo), y a eso le llamamos v.0.1
    Si hacemos un tag, entonces cualquiera que quiera hacer desarrollos deberia ir al tag 0.1.

    En general es poco recomendable que la gente se baje el trunk, por que no se sabe lo que puede haber. El trunk solo sirve de manera interna para los que trabajan sobre el codigo o para los que tienen un conocimiento avanzado del codigo y quieren resolver o buscar bugs.

    ResponderEliminar
  3. Otra cosa acerca de los SVN. Siempre que subamos cosas (cuando se hace un commit), es muy necesario, si no imprescindible, anotar que subes o que cambias. No hay que poner los archivos que subimos, por que eso ya se puede ver en el repositorio, sino una breve explicacion de los contenidos y los cambios.

    ResponderEliminar
  4. @strong: git.hub.?? ni idea la verdad...yo donde esté mi SVN de las entretelas.. :D te atreves ha hacer un tuto de como va y te lo cuelgo?

    @kill: si, ya se que existen los tags, pero la verdad, mi experiencia me ha dicho que son más peligrosos que una mala cosa (tampoco me he metido mucho la verdad) y no me he atrevido a explicarlos.
    Logicamente si, cuando se suben cosas se ha de apuntar lo que se ha hecho, igual que cuando se crea un branch se ha de apuntar el motivo o cuando se crea un proyecto su finalidad. El tema de la documentación es una cosa que al principio cuesta muchisimo de entender por que la gente está acostumbrada a trabajar sola en casa, pero a la que trabajas con grupos heterogeneos, grandes y cambiantes lo aprendes rapidisimo :D (por narices y escarmientos).

    ResponderEliminar
  5. No creo haga falta hacer tute, es muy sencillo, acerca de github:
    http://es.wikipedia.org/wiki/GitHub

    Saludos.
    StrongCod3r.

    ResponderEliminar
  6. Ostia , pues si. Tiene muy buena pinta, pero me sigue gustando el SVN :D :D :D

    Soy un animal de costumbres y hace ya mucho que estoy con este sistema.. pero realmente parece muy chulo.

    ResponderEliminar
  7. Jeje...va cualquiera de los dos es bueno. Yo siempre e sido partidario de tecnologias de google, que le pusieran un poco mas de graficas al google code y que mejoraran el cliente web SVN. Pero bueno tal como esta el svn ahora va bien el engine.

    Saludos.
    StrongCod3r.

    ResponderEliminar

Entradas populares