Se llama a los sistemas de control de versiones (SVC, del inglés System Version Control) al software que de alguna forma anota los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo.
Una versión, revisión o edición de un producto, es el estado en el que se encuentra el mismo en un momento dado de su desarrollo o modificación.
Estos sistemas facilitan el manejo de las distintas versiones de cada producto desarrollado, así como las posibles especializaciones realizadas o ramas, que por ejemplo se puede usar para modificar el producto para algún cliente específico.
Ejemplos de este tipo de herramientas son:
CVS
|
Subversion (SVN)
|
LibreSource
|
SourceSafe
|
ClearCase
|
Darcs
|
Bazaar
|
Monotone
|
Plastic SCM
|
Git
|
GitHub
|
Mercurial
|
Perforce
|
Gitorious
|
Gitlab
|
Bitbucket
|
Tipos de sistemas de control de versiones (SVC)
A los SVC los clasificaremos en cuanto a donde se almacena el código en los siguientes tipos:
Centralizados
Los SVC centralizados es donde existe un repositorio central para todo el código, del cual es responsable un único usuario (o conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable.
Ventajas:
- En el sistema centralizado hay más control ya que se tiene una versión centralizada de todo lo que se está haciendo en el proyecto, sin embargo esto hace que los desarrolladores trabajen más lentamente, de una manera más rígida y molesta.
- En los sistemas centralizados las versiones vienen identificadas por un número de versión, lo cual resulta más natural ya que en los sistemas de control de versiones distribuidos no hay números de versión.
Distribuidos
Los SVC distribuidos es donde cada usuario tiene su propio repositorio. Los distintos repositorios se pueden intercambiar y mezclar revisiones entre ellos. Es frecuente el uso de un repositorio, que está normalmente disponible y que sirve de punto de sincronización de los distintos repositorios locales.
Ventajas
- Casi no necesita estar conectado a la red para hacer operaciones. Esto produce una mayor autonomía y una mayor rapidez en el desarrollo.
- Aunque no esté disponible el repositorio remoto la gente puede seguir trabajando.
- Al hacer los distintos repositorio una réplica local de la información de los repositorios remotos a los que se conectan, la información está muy replicada y por tanto el sistema tiene menos problemas en recuperarse si por ejemplo se quema la máquina que tiene el repositorio remoto. Por tanto hay menos necesidad de backups. Sin embargo los backups siguen siendo necesarios para resolver situaciones en las que cierta información todavía no haya sido replicada.
- Permite mantener repositorios centrales más limpios en el sentido de que un usuario puede decidir que ciertos cambios realizados por él en el repositorio local, no son relevantes para el resto de usuarios y por tanto no permite que esa información sea accesible de forma pública. Por ejemplo es muy útil se pueden tener versiones inestables o en proceso de codificación o también tags propios del usuario.
- El servidor remoto requiere menos recursos que los que necesitaría un servidor centralizado ya que gran parte del trabajo lo realizan los repositorios locales.
- Al ser los sistemas distribuidos más recientes que los sistemas centralizados, y al tener más flexibilidad por tener un repositorio local y otro u otros remotos, estos sistemas han sido diseñados para hacer fácil el uso de ramas (creación, evolución y fusión) y poder aprovechar al máximo su potencial. Por ejemplo se pueden crear ramas en el repositorio remoto para corregir errores o crear funcionalidades nuevas. Pero también se pueden crear ramas en los repositorio locales para que los usuarios puedan hacer pruebas y dependiendo de los resultados fusionarlos con el desarrollo principal o no. Las ramas dan una gran flexibilidad en la forma de trabajo.
Referencias
- http://es.wikipedia.org/wiki/Control_de_versiones
- http://www.nongnu.org/cvs/
- http://es.wikipedia.org/wiki/CVS
- http://subversion.apache.org/
- http://es.wikipedia.org/wiki/Subversion_(software)
- http://dev.libresource.org/
- http://en.wikipedia.org/wiki/LibreSource
- http://msdn.microsoft.com/es-es/library/3h0544kx(v=vs.80).aspx
- http://es.wikipedia.org/wiki/Microsoft_Visual_SourceSafe
- http://www-03.ibm.com/software/products/en/clearcase
- http://en.wikipedia.org/wiki/IBM_Rational_ClearCase
- http://darcs.net/
- http://es.wikipedia.org/wiki/Darcs
- http://bazaar.canonical.com/en/
- http://es.wikipedia.org/wiki/Bazaar_(software)
- http://www.monotone.ca/
- http://es.wikipedia.org/wiki/Monotone
- http://www.plasticscm.com/home.html
- http://es.wikipedia.org/wiki/Plastic_SCM
- http://mercurial.selenic.com/
- http://es.wikipedia.org/wiki/Mercurial
- http://www.perforce.com/
- http://es.wikipedia.org/wiki/Perforce
- https://gitorious.org/
- http://es.wikipedia.org/wiki/Gitorious
- https://about.gitlab.com/
- https://wiki.archlinux.org/index.php/gitlab
- https://bitbucket.org/
- http://es.wikipedia.org/wiki/Bitbucket
- http://git-scm.com/
- http://es.wikipedia.org/wiki/Git
- https://github.com/
- http://es.wikipedia.org/wiki/GitHub <== Español
- http://en.wikipedia.org/wiki/GitHub <== Ingles (más completa)
- http://anotheruiguy.gitbooks.io/gitforeveryone/
- http://help.gitbook.io/
- http://gitbookio.gitbooks.io/progit/es/index.html
- http://issuu.com/pucesd/docs/5_disertaci__n_de_grado
- http://en.wikipedia.org/wiki/Comparison_of_open-source_software_hosting_facilities
- http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version-control-systems/
- http://wpmallorca.com/2013/02/12/pero-que-es-github/
- http://aprendegit.com/category/github/
- http://barradevblog.wordpress.com/2013/01/21/que-es-gitgithub/