Sei sulla pagina 1di 23

SubVersioN

Jess Andrs Ferrer Adri Gimnez Pastor {jandres,agimenez}@iti.upv.es

ndice
1. Introduccin 2. Distribucin de los repositorios 3. Interfaz de linea de comandos 4. Comandos de sincronizacin con el servidor 4.1. CheckOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 4 5 6 6 8 9 11

4.4. Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. Revert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. Resolucin de conictos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Comandos de consola

J. Andrs Ferrer y A. Gimnez

ITI iDoc

6. Comandos de consulta 6.1. log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7. Sesin tpica 8. Branches y Tags 8.1. Branches y Tags en SVN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2. Merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1. Conictos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.2. Copiando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. Mas informacin

12 12 13 14 15 16 17 18 19 20

J. Andrs Ferrer y A. Gimnez

ITI iDoc

1.

Introduccin
Subversion es un sistema de control de versiones. El rbol de cheros se encuentra en un repositorio central El repositorio central es accesible por red Se deben crear copias locales para trabajar en ellas Las copias locales se deben sincronizar con el servidor Mantiene una historia de todos los cambios producidos Permite examinar la historia de cambios Permite recuperar versiones antiguas Gestiona la posibilidad de que varios usuarios lo modiquen simultneamente el repositorio (incluso el mismo chero) Algunas diferencias con CVS: Versin de directorios: Cada revisin hace referencia a todo el rbol, no existe una historia independiente para cada chero Control de versiones real: Como la revisin es global, soporta creacin, borrado, renombrado y movimiento de cheros Actualizaciones atmicas: Un conjunto de modicaciones se sube entero al repositorio o no se sube Clientes: svn: Cliente estndar por lnea de comandos (Paquete subversion ) RapidSVN: Front-end grco para subversion que usa wxWidgets. ( Paquete rapidsvn)

J. Andrs Ferrer y A. Gimnez

ITI iDoc

2.

Distribucin de los repositorios


No existe ninguna estructura de directorios obligada Se recomienda seguir una jerarqua como la siguiente:
/ +-- proyecto1 +-- trunk | |-- branches | |__ tags | |-- proyecto2 +-- trunk | |-- branches | |__ tags . . . .

Donde / es la raz del repositorio El contenido de cada directorio es: PROJECT/trunk: la raz del proyecto PROJECT PROJECT/branches: Se almacenan las bifurcaciones o ramas (branches) del proyecto PROJECT/tags: almacena las versiones congeladas del proyecto PROJECT Si el repositorio solo almacena un proyecto la jerarqua tpica es:
/ +-- trunk |-- branches |__ tags

J. Andrs Ferrer y A. Gimnez

ITI iDoc

3.

Interfaz de linea de comandos


svn [opciones_svn] comando [opciones_comando] Comandos mas tiles: Comandos de sincronizacin con el servidor svn checkout svn status svn update svn commit svn revert Comandos de consola: sustituyen a los de la consola y gestionan el historial svn mv svn rm svn add svn copy Comandos de consulta svn status svn log svn diff

J. Andrs Ferrer y A. Gimnez

ITI iDoc

4.
4.1.

Comandos de sincronizacin con el servidor


CheckOut

svn co protocolo://servidor/path_a_repositorio/sub dir_local [-username usuario] Descarga una copia del subdirectorio sub del repositorio en local almacenada en el directorio dir_local Solo es necesario ejecutarlo una vez por cada copia y/o repositorio Ejemplos: svn co svn+ssh://tefate4.dsic.upv.es/usr/local/svn_root/Ejemplo1 01-Ejemplo1 -username jandres svn co https://spe.iti.upv.es/iDoc/svn/trunk 01-iDoc_Trunk svn co https://projects.iti.upv.es/svn/iTransDoc iTransDoc svn co https://spe.iti.upv.es/iDoc/svn/ 01-iDoc

J. Andrs Ferrer y A. Gimnez

ITI iDoc

4.2.

Status

svn status [dir] Examina el estado de los cheros de la copia local El directorio debe contener un checkout de un repositorio Formato de la salida: Estado ruta_a_fichero Estado puede tomar uno de los siguientes valores: ? M A D C G A+ M+ Ejemplo: ? M A README_NOT_SVN Texto1.txt Texto1_cpy.txt Fichero ignorado por svn por no estar bajo el control del svn Fichero modicado local mente (pendiente de enviar con commit al servidor) Fichero modicado local mente (pendiente de enviar con commit al servidor) Preparado para borrado(pendiente de enviar con commit al servidor) Conicto con un update Modicado localmente e incorporado cambios remotos Histrico como chero(directorio) pero es un directorio(chero) Aadido con historial de procedencia Modicado con historial de procedencia

J. Andrs Ferrer y A. Gimnez

ITI iDoc

4.3.

Update

svn update [file_dir_list] ACTUALIZA


LA COPIA LOCAL CON EL SERVIDOR

Recomendable comprobar el estado antes del update (svn status) Muestra la misma salida que svn status indicando los cambios realizados 4.4. Commit svn commit -m revision comment P ROPAGA
AL SERVIDOR LOS CAMBIOS PENDIENTE EN LA COPIA LOCAL

Recomendable comprobar el estado antes del commit (svn status) La copia local tiene que estar actualizada (svn update) Es obligatorio introducir un comentario sobre los cambios

J. Andrs Ferrer y A. Gimnez

ITI iDoc

Ejemplo: --$ svn commit -m "copiado" Sending trunk/Texto1.txt Adding trunk/Texto1_cpy.txt Transmitting file data .. Committed revision 3. --$ svn rename Texto1_cpy.txt texto2.txt A texto2.txt D Texto1_cpy.txt --$ svn commit -m " Texto1_cpy.txt renombrado a Deleting trunk/Texto1_cpy.txt Adding trunk/texto2.txt Committed revision 4. .... (en otro repositorio) ... --$ svn status --$ --$ svn update U trunk/Texto1.txt A trunk/texto2.txt Updated to revision 4.
J. Andrs Ferrer y A. Gimnez 7 ITI iDoc

texto2.txt "

4.5.

Revert

svn revert {file|directorio} Desecha los cambios de un chero o un directorio Los cambios desechados son los realizados desde el ltimo update Ejemplo: --$ svn status M Texto1.txt M texto2.txt --$ svn revert texto2.txt Reverted texto2.txt --$ svn status M Texto1.txt --$ svn revert Texto1.txt Reverted Texto1.txt --$ svn status --$

J. Andrs Ferrer y A. Gimnez

ITI iDoc

4.6.

Resolucin de conictos

Cuando se hace un update pueden aparecer conictos. Ejemplo, el chero texto3.txt presenta un conicto --$ svn update C texto3.txt Updated to revision 8. Se generan 3 cheros al detectar un conicto en el chero conf: conf.mine Fichero con las modicaciones locales ( conf antes del update) conf.r[n] Fichero con las modicaciones de la revisin local antes del update n conf.r[m] Fichero con las modicaciones la revisin local despus del update, m El chero original conf pasa a ser la diferencia entre .mine y .r[m]: ===== Smbolo delimitador <<<<<<< .mine Cdigo local hasta smbolo delimitador >>>>>>> .r[m] Cdigo de la revisin m El conicto se resuelve borrando los tres cheros (conf.mine,conf.r[n] y conf.r[m]) svn resolved no resuelve el conicto, elimina el estado de conicto La versin correcta del chero esta contenida en el propio chero Ejemplo: --$ ls texto3.txt* texto3.txt texto3.txt.mine
J. Andrs Ferrer y A. Gimnez 9

texto3.txt.r7

texto3.txt.r8
ITI iDoc

texto3.txt.mine Cuando hay un conflicto se generan 3 ficheros: .mine .rn .rm texto3.txt.r7 Ejemplo de conflictos en svn texto3.txt.r8 SUBVERSION ---------Ejemplo de conflictos en svn texto3.txt <<<<<<< .mine Cuando hay un conflicto se generan 3 ficheros: .mine .rn .rm ======= SUBVERSION ---------Ejemplo de conflictos en svn >>>>>>> .r8
J. Andrs Ferrer y A. Gimnez 10 ITI iDoc

5.

Comandos de consola
svn add files|dirs Aade cheros al repositorio local No se hace efectivo en el servidor hasta el commit svn remove files|dirs Elimina cheros del repositorio local No se hace efectivo en el servidor hasta el commit svn copy A B Copia el chero (directorio) A al chero (directorio) B Copia el historial de A en B No se hace efectivo en el servidor hasta el commit Diferencias entre -$ svn copy y -$ copy ? svn move A B Copia el chero (directorio) A al chero (directorio) B Copia el historial de A en B Borra el directorio A despus de la copia No se hace efectivo en el servidor hasta el commit Diferencias entre -$ svn mv y -$ mv ?

J. Andrs Ferrer y A. Gimnez

11

ITI iDoc

6.
6.1.

Comandos de consulta
log

svn log Muestra los mensajes de los commits (logs) junto con informacin adicional Lista las 10 anteriores revisiones svn log -rn:m Lista la informacin de las revisiones desde n a m svn log -r n Lista la informacin de la revisin n Ejemplo:

--$ svn log -----------------------------------------------------------------------r33 | ajuan | 2007-04-19 18:33:21 +0200 (Thu, 19 Apr 2007) | 1 line hasta la pgina 65 ... kickoff a WP1 -----------------------------------------------------------------------r24 | ajuan | 2007-03-30 12:29:11 +0200 (Fri, 30 Mar 2007) | 1 line +trunk
J. Andrs Ferrer y A. Gimnez 12 ITI iDoc

6.2.

diff

svn diff [files] Muestra las diferencias entre el estado de los cheros y la revisin del ltimo update de los cheros indicados Si no se indica nada calcula la diferencia de todos los cheros del directorio actual svn diff -rn [files] Utiliza la revisin n para calcular las diferencias en lugar de la ltima del update svn diff -rn:m [files] Calcula las diferencias entre las versiones n y m Ejemplo: --$ svn diff -r1:4 texto3.txt Index: Texto1.txt =================================================================== --- Texto1.txt (.../Texto1.txt) (revision 1) +++ Texto1.txt (.../texto2.txt) (revision 4) @@ -1,3 +1,4 @@ +#include <vector> template<typename T> class pila{ @@ -11,4 +12,5 @@ inline bool pop_back( const T& value){ _data.push_back(value);} inline T back() {_data.first();} +// Add more functions };
J. Andrs Ferrer y A. Gimnez 13 ITI iDoc

7.

Sesin tpica

--$ svn status M Texto1.txt --$ svn update At revision 8. ... Trabajamos en la copia local ... --$ svn status D Texto1.txt A + texto1.txt D texto2.txt A include M texto3.txt A + src/texto2.txt --$ svn commit -m " Ejemplo de sesin" Deleting trunk/Texto1.txt Adding trunk/include Adding trunk/src/texto2.txt Adding trunk/texto1.txt Deleting trunk/texto2.txt Sending trunk/texto3.txt Transmitting file data .. Committed revision 9. --$ svn status --$

J. Andrs Ferrer y A. Gimnez

14

ITI iDoc

8.

Branches y Tags
Branch: Es una nueva lnea de desarrollo en el repositorio creada a partir de la lnea principal de desarrollo o de otra rama Branch Las motivaciones principales son: Mantener varias versiones de un mismo proyecto Ejemplo: una branch para cada release: bugs, testing y trunk Evitar conictos con los dems desarrolladores durante cambios complejos Tag: Es la versin congelada de un proyecto en un momento dado Ejemplo: un tag por cada release nal

J. Andrs Ferrer y A. Gimnez

15

ITI iDoc

8.1.

Branches y Tags en SVN

Branch: No se representa de forma especial Un branch es una copia del directorio de la lnea de desarrollo principal (o de otro branch) Comando:
svn checkout http://ma.qui.na/repositorio/proyecto copia_local cd copia_local svn copy trunk branches/mi-branch svn commit -m "Creando una nueva branch de /proyecto/trunk."

Alternativamente:
svn copy http://ma.qui.na/repositorio/proyecto/trunk \ http://ma.qui.na/repositorio/proyecto/branches/mi-branch \ -m "Creando una nueva branch de /proyecto/trunk."

Tag: Se gestionan igual que los branches Se supone que un tag es una copia de una revisin que no se modica
svn copy http://ma.qui.na/repositorio/proyecto/trunk \ http://ma.qui.na/repositorio/proyecto/tags/release-1.0.5 \ -m "Creando el tag release-1.0.5 de /proyecto/trunk."

J. Andrs Ferrer y A. Gimnez

16

ITI iDoc

8.2.

Merge

Cuando se trabaja con branches surgen dos necesidades: exportar modicaciones puntuales de la lnea principal a una branch actualizar la lnea principal de desarrollo con una branch El comando que se utiliza es svn merge svn merge arbolA arbolB directorio 1. arbolA: un rbol, del repositorio, inicial (parte izquierda de la comparacin) 2. arbolB: un rbol, del repositorio, nal (parte derecha de la comparacin) 3. directorio:Directorio local svn merge realiza un diff entre el rbol inicial y nal Tras calcular las diferencias, se aplican en el directorio local. Ejemplos:
svn merge http://ma.qui.na/repositorio/branch1@150 \ http://ma.qui.na/repositorio/branch2@212 \ mi-directorio svn merge -r 100:200 http://ma.qui.na/repositorio/trunk

J. Andrs Ferrer y A. Gimnez

17

ITI iDoc

8.2.1.

Conictos

El comando svn merge puede generar conictos Como se trabaja en el directorio local siempre se puede deshacer el merge con svn revert. Se utiliza una nueva notacin para los conictos: lename.left: versin parte izquierda de la comparacin lename.right: versin parte derecha de la comparacin lename.working: versin del directorio local Hay que tener cuidado porque es muy fcil equivocarse al escribir el comando, y intentar aplicar las diferencias entre dos rboles a un directorio local que no tiene nada que ver con esos rboles Esto suele producir gran cantidad de conictos, para solucionarlo lo mejor es deshacer los cambios locales: svn revert --recursive

J. Andrs Ferrer y A. Gimnez

18

ITI iDoc

8.2.2.

Copiando

Cambios puntuales entre branches:] Ejemplo de copia de los cambios ocurridos en la lnea principal entre la versin 100 y 103
svn merge -r 100:103 http://ma.qui.na/repositorio/proyecto/trunk

Juntar dos branches: Para hacer esto en el directorio local tiene que haber una copia de la branch destino. ATENCIN!!! la comparacin entre las ltimas versiones de las dos branches es un error muy comn El procedimiento correcto es realizar una comparacin entre las versiones inicial y nal de la rama origen Ejemplo: Suponiendo que mi-brach se cre en la revisin 98 y que estamos en la 105, y que se quiere juntar con la lnea de desarrollo principal:
cd proyecto/trunk svn merge -r 98:105 http://ma.qui.na/repositorio/proyecto/branches/mi-branch

J. Andrs Ferrer y A. Gimnez

19

ITI iDoc

9.

Mas informacin
http://svnbook.red-bean.com/

https://spe.iti.upv.es/iDoc/trac/wiki/GuiaSVN

http://subversion.tigris.org/

iDoc Trac: https://spe.iti.upv.es/iDoc/trac/

iDoc svn (para hacer checkout): https://spe.iti.upv.es/iDoc/svn/

iTransDoc Trac: https://projects.iti.upv.es/trac/iTransDoc

iTransDoc svn (para hacer checkout): https://projects.iti.upv.es/svn/iTransDoc/

J. Andrs Ferrer y A. Gimnez

20

ITI iDoc

Potrebbero piacerti anche