Lihuen
RSSRSS AtomAtom

Diferencia entre revisiones de «Cómo usar SVN»

Línea 17: Línea 17:
 
  ~$ cd ~/svn
 
  ~$ cd ~/svn
  
== Haciendo el checout ==
+
== Haciendo el checkout ==
 
Para obtener una copia del trabajo tenemos que conocer la ubicación de un repositorio en internet. Uno bueno para probar es el mismo del proyecto SVN donde podremos obtener una copia del código fuente del mismísimo SVN.
 
Para obtener una copia del trabajo tenemos que conocer la ubicación de un repositorio en internet. Uno bueno para probar es el mismo del proyecto SVN donde podremos obtener una copia del código fuente del mismísimo SVN.
 
Eso se hace de la siguiente manera
 
Eso se hace de la siguiente manera
Línea 73: Línea 73:
 
Si el comentario no es muy largo y se quiere evitar el paso del editor, se puede introducir el comentario en la misma invocacion a ''ci''.
 
Si el comentario no es muy largo y se quiere evitar el paso del editor, se puede introducir el comentario en la misma invocacion a ''ci''.
 
  ~/svn$ svn ci -m "Agregado el archivo foo.src; Modificado el archivo bar.src para proveer la funcionalidad pedida"
 
  ~/svn$ svn ci -m "Agregado el archivo foo.src; Modificado el archivo bar.src para proveer la funcionalidad pedida"
 +
==Agregando archivos nuevos==
 +
Cuando se crean archivos o carpetas que no existian en la copia bajada del repositorio, en necesario agregarlas al control de versiones. Si corremos el subcomando ''status'' despues de haber creado archivos nuevos, aparecerán precedidos por un carácter ''?'', indicando que son archivos o carpetas desconocidas.
 +
Para agregar un archivo o una carpeta y todo su contenido al control de versiones se usa el subcomando ''add''
 +
~/svn$ svn add archivo.src carpeta/

Revisión de 13:56 25 oct 2007

Introducción

SVN es un sistema de control de versiones usado para que varios desarrolladores puedan trabajar en un mismo proyecto en forma más o menos ordenada. Tiene una arquitectura cliente servidor con controles de concurrencia para cuando varios desarrolladores estan trabajando en el mismo archivo y funciona más o menos así. En algún servidor se monta un repositorio SVN. En este lugar se van a registrar los cambios (revisiones) y los logs que se vayan generando. El cliente de SVN se baja una copia local de alguna revisión (generalmente la última), el desarrollador hace los cambios y los sube al servidor para que esten disponibles para los otros desarrolladores (además de generar un log con un comentario de que cosa modifico, para que, etc, etc, etc). La parte de configuración y puesta en marcha del servidor la dejo para otro documento y vamos a la parte importante, como usar el cliente de svn (desde la terminal). Para este documento usaré ~# como indicador de shell de root y ~$ como shell de usuario.

Instalando subversion

Primero, hay que instalar un cliente de svn. En Lihuen eso se puede hacer instalando el paquete subversion desde Synaptic o simplemente corriendo desde una terminal con permisos de root los siguientes comandos:

~#apt-get update
~#apt-get install subversion

Una ves que tengamos instalados y configurados estos paquetes, creamos una carpeta en nuestro $HOME donde guardaremos nuestra copia local del repositorio.

~$ mkdir /$HOME/svn

En este ejemplo, si el usuario es pepito, mkdir creara un directorio en /home/pepito/ llamado svn. Ahora entramos al directorio que creamos recien.

~$ cd ~/svn

Haciendo el checkout

Para obtener una copia del trabajo tenemos que conocer la ubicación de un repositorio en internet. Uno bueno para probar es el mismo del proyecto SVN donde podremos obtener una copia del código fuente del mismísimo SVN. Eso se hace de la siguiente manera

~/svn$ svn co http://svn.collab.net/repos/svn

El subcomando co tiene el mismo efecto que(de hecho, es un alias para) el subcomando checkout, asi que es lo mismo que poner

~/svn$ svn checkout http://svn.collab.net/repos/svn

Hay que tener en cuenta que esto puede tardar un buen rato, dependiendo de la velocidad de conección. Una ves terminado el proceso de descarga ya podemos empezar a modificar los archivos fuente. Generalmente, un repositorio estandar bien armado publica tres carpetas. Trunk, donde van los cambios principales y el hilo principal de desarrollo, branches, donde se introducen cambios importantes con respecto al desarrollo principal y tags, donde se congelan los cambios para una determinada version. (Esto debería estar mejor explicado en el documento sobre configuraciones del servidor SVN) A medida que introducimos modificaciones, por ejemplo en la rama trunk, el estado de nuestra copia con respecto al repositorio original cambia. Podemos ver el estado de la copia de trabajo con el subcomando status

~/svn$ cd svn
~/svn/svn$ svn status
A    svn/trunk/subversion/tests/cmdline/svneditor.bat
M    svn/trunk/subversion/tests/cmdline/import_tests.py
!    svn/trunk/subversion/tests/cmdline/svnadmin_tests.py
?    svn/trunk/subversion/tests/cmdline/log_tests.py
D    svn/trunk/subversion/tests/cmdline/special_tests_data
C    svn/trunk/subversion/tests/cmdline/special_tests_data/bad-special-type.dump

Y asi. Los códigos de la izquierda son los indicadores de estado, y se pueden ver con

~/svn$ svn help status

Los pasteo aqui como referencia los más reelevantes.

     ' ' no hay modificaciones
     'A' Agregado
     'C' Presenta conflicto
     'D' Eliminado
     'I' Ignorado
     'M' Modificado
     'R' Reemplazado
     'X' Este ítem no está versionado, pero es usado por una
         definición de externals
     '?' el ítem no está bajo control de versiones
     '!' ítem faltante (removido por un comando ajeno a svn) o incompleto
     '~' ítem versionado obstruido por algún otro ítem de un tipo diferente
     'L' Copia bloqueada
 
La información de actualización aparece en la octava columna (con -u):
     '*' hay una nueva revisión en el servidor
     ' ' la copia de trabajo está actualizada

Los campos restantes son de ancho variable y están delimitados por espacios:
   La revisión de trabajo (con -u o -v)
   La ultima revisión que se hizo commit y su autor(con -v)
   La ruta de copia de trabajo siempre es el último campo, para que
   pueda contener espacios en blanco.

El subcomando help

Lo anterior nos introduce al subcomando help. Con:

~/svn$ svn help subcomando

Podremos ver la ayuda para el subcomando subcomando. Incluso en Lihuen, con bash_completion, si presionamos la tecla tab despues de poner svn help o svn , nos mostrará todos los posibles subcomandos.

Subiendo los cambios

Una ves que modificamos un archivo, si corremos el subcomando status nos debería mostrar la ruta al archivo precedido por la letra M indicando que fue modificado. Para compartir los cambios con los demás desarrolladores es necesario subir los cambios al repositorio. Esto se hace con el subcomando ci.

~/svn$ svn ci

SVN necesita un comentario acerca de el o los archivos que se estan subiendo, por lo que abrirá el editor de texto por defecto. Una ves ingresado el comentario y guardados los cambios, iniciará el proceso de subida de archivos. Si el comentario no es muy largo y se quiere evitar el paso del editor, se puede introducir el comentario en la misma invocacion a ci.

~/svn$ svn ci -m "Agregado el archivo foo.src; Modificado el archivo bar.src para proveer la funcionalidad pedida"

Agregando archivos nuevos

Cuando se crean archivos o carpetas que no existian en la copia bajada del repositorio, en necesario agregarlas al control de versiones. Si corremos el subcomando status despues de haber creado archivos nuevos, aparecerán precedidos por un carácter ?, indicando que son archivos o carpetas desconocidas. Para agregar un archivo o una carpeta y todo su contenido al control de versiones se usa el subcomando add

~/svn$ svn add archivo.src carpeta/