Sub Version (SVN)

Subversion es un software de sistema de control de versiones diseñado específicamente para reemplazar al popular CVS, el cual posee varias deficiencias. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser ese el nombre de la herramienta de línea de comandos. Una característica importante de Subversion es que, a diferencia de CVS, los archivos versionados no tienen cada uno un número de revisión independiente. En cambio, todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en cierto punto del tiempo.

Lista de Referencia Rapida para SVN

  • Creando un proyecto nuevo

Lo primero que debemos hacer es crear el/los repositorio/s en el servidor

cd /var/lib/svn
mkdir repositorios
svnadmin create repositorios/appNueva

  • Importar datos al servidor SVN (Solo se hace la primera vez)

svn import /media/disco/appNueva file:///var/lib/svn/appNueva/trunk -m "Archivos iniciales de la App"

  • El primer checkout o primera descarga

cd /home/user/destino
svn checkout file:///var/lib/svn/appNueva/trunk appNueva

  • Informacion del Repocitorio

Comando:

$ svn info

Salida:

Path: .
URL: svn+ssh://asterix/var/lib/svn/decidir/host-config/obelix
Repository Root: svn+ssh://asterix/var/lib/svn/decidir
Repository UUID: c4fbbc7e-59fb-48a1-889c-a1b846ecd3e4
Revision: 250
Node Kind: directory
Schedule: normal
Last Changed Author: diegor
Last Changed Rev: 247
Last Changed Date: 2008-10-01 16:36:24 -0300 (Wed, 01 Oct 2008)

  • Estado de los archivos del Repositorio, esta función sirve para saber que archivos fueron modificados y cuales son nuevos y no estan dentro del repositorio

Comando:

$ svn status

Salida:

? src/class.cpp
? src/class.h
M src/main.cpp
M src/Makefile
? bin/main

En el ejemplo que se muestra se puede ver que los archivos marcados con la M, fueron modificados y lo que tienen el “?” significa que son nuevos o no están dentro del repositorio controlado por svn

  • Agregar archivos al Repositorio.

Basándonos en el ejemplo anterior con el comando svn add podemos agrear archivos al repositorio. Comando:

$ svn add src/class.h src/class.cpp

Salida:

A src/class.h
A src/class.cpp

Como podemos ver en el ejemplo ahora los archivos que estaban marcados con un ? esta marcados con una A, eso quiere decir que ya están dentro del repositorio controlado por SVN

  • Subir cambios al repocitorio

Para actualizar los cambios y subir los archivo nuevo que agregamos debemos hacer lo siguiente: Comando:

$ svn commit -m 'Comentario descriptivo sobre los cambios realizados ej: se agrego una clase parar decir Hola Mundo!'

Salida:

Sending trunk/src/Makefile
Adding trunk/src/class.cpp
Adding trunk/src/class.h
Sending trunk/src/main.cpp
Transmitting file data ....
Committed revision 4.

  • Traer una revisión especifica del repositorio.

En el caso que deseemos traer una version anterior o alguna en particular del repositorio debemos hacer lo siguiente:

Comando:

$ svn checkout -r 4 file:///home/user/svn project

Como podemos ver agregamos el modificador -r al checkout esto se refiere al numero de revisión que queremos traer del repositorio.

Salida:

A project/project
A project/project/trunk
A project/project/trunk/doc
A project/project/trunk/doc/index.html
A project/project/trunk/src
A project/project/trunk/src/main.cpp
A project/project/trunk/src/class.cpp
A project/project/trunk/src/class.h
A project/project/trunk/src/Makefile
A project/project/trunk/bin
Checked out revision 4.

  • Información especifica sobre un archivo en particular:

Comando:

$ svn info trunk/src/main.cpp

Salida:

Path: trunk/src/main.cpp
Name: main.cpp
URL: file:///home/user/svn/project/trunk/src/main.cpp
Revision: 4

  • Revertir Cambios

Comando:

svn revert file:///home/user/svn/project/trunk/src/main.cpp

Revierte cualquier cambio local sobre un fichero o directorio y resuelve cualquier estado de conflicto. svn revert no solamente revertirá el contenido de un elemento en su copia local de trabajo, sino también cualquier cambio de propiedades. Finalmente, puede usarlo para deshacer cualquier operación anteriormente programada.

  • Resolver conflictos con archivos.

Comando:

svn resolved file:///home/user/svn/project/trunk/src/main.cpp

Resuelve el estado “conflictivo” en ficheros o directorios de la copia de trabajo local. Esta rutina no resuelve marcas de conflicto a nivel semántico; meramente elimina los ficheros artefacto relacionados con el conflicto y permite que file:///home/user/svn/project/trunk/src/main.cpp pueda ser enviado de nuevo al repositorio; es decir, le dice a Subversion que los conflictos han sido “resueltos”.

  • Mirar el contido de un archivo de una versión en particular

Conmando:

$ svn cat -r3 file:///home/user/svn/project/trunk/src/main.cpp

Donde -r3 es el numero de revisión que queremos ver.

  • Diferencias entre archivos

svn diff produce un fichero diff aplicable por el programa patch(1). Por defecto, usa el formato diff unificado. Es posible pasar opciones adicionales a la utilidad diff(1) subyacente por medio del modificador -x. Por defecto, compara la copia de trabajo actual con la última revisión descargada, pero también puede producir un parche entre dos revisiones arbitrarias del repositorio, o entre su copia de trabajo y una revisión anterior con el modificador -r:

Comando:

$ svn diff -r14:18 *.c *.h > /tmp/r14-to-r18.patch

Tambien diff se puede usar para comparar dos revisiones del repositorio distintas:

$ svn diff -r 2:3 file:///home/user/svn/project/trunk/src/main.cpp

Donde -r 2:3 son las revisiones a comparar.

Salida:

Index: main.cpp
===================================================================
--- main.cpp (revision 2)
+++ main.cpp (revision 3)
@@ -7,3 +7,4 @@
- Codigo y/o Texto 1
- Codigo y/o Texto 2
- Codigo y/o Texto 3
+ - Codigo y/o Texto 4

  • Listar el Contenido de un Repositorio

Comando:

$ svn ls {RUTA}

Salida:

247 diegor 19671 Oct 01 16:36 ferm.conf
242 diegor 3348 Sep 30 17:13 ruteo.sh
2 martin 1219 Jul 24 2007 vpn-setup
245 diegor 623 Oct 01 16:24 vpn-setup.conf
4 spavon 1442 Aug 13 2007 vtund.conf

  • Log de actividades del svn

Para ver el historial de cambios y usuarios que lo realizaron el procedimiento es el siguiente

Comando:

$ svn log {archivo}

para un log general sobre todo el repositorio simplemente podemos hacer

$ svn log

Salida:

------------------------------------------------------------------------
r4 | spavon | 2007-08-13 17:44:01 -0300 (Mon, 13 Aug 2007) | 2 lines

Se agrego bonavena al vtun

————————————————————————
r2 | martin | 2007-07-24 21:01:47 -0300 (Tue, 24 Jul 2007) | 2 lines

Port de los archivos de fw-configs

————————————————————————

  • Actualizar el repositorio Local con respecto al repositorio del SVN

Con esto lo que hacemos es traer todos los cambios que esten en el repositorio y que no este actualizados en nuestra copia local. Comando:

$ svn update

Ingnorar archivos y directorios en svn

svn propedit svn:ignore ./path

Leave a Reply

*