User Tools

Site Tools


informatica:linux:subversion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatica:linux:subversion [2009/11/05 07:47] – editor externo 127.0.0.1informatica:linux:subversion [2015/04/13 20:19] (current) – external edit 127.0.0.1
Line 51: Line 51:
  
 9. Repetir los pasos 3-8 sustituyento 'proyecto_1' por 'proyecto_2' 9. Repetir los pasos 3-8 sustituyento 'proyecto_1' por 'proyecto_2'
 +
  
 ===== Ciclo de trabajo ===== ===== Ciclo de trabajo =====
Line 65: Line 66:
 3. Examinar cambios 3. Examinar cambios
   *svn status   *svn status
 +
 +Para ver los cambios de la copia local respecto al repositorio:
 +
 +  *svn status --show-updates
 +
   *svn diff   *svn diff
 4. (Opcional) revertir cambios realizados 4. (Opcional) revertir cambios realizados
Line 103: Line 109:
  
 ===== Subversion y apache ===== ===== Subversion y apache =====
 +
 +==== Apache >=2.4.x y subversion >=1.8.x ====
 +
 +http://svnbook.red-bean.com/en/1.8/svn.serverconfig.httpd.html
 +
 +1. Instalar paquetes
 +
 +  sudo aptitude update; sudo aptitude install apache2 subversion libapache2-svn
 +
 +2. Habilitar módulo de apache:
 +
 +<code>
 +sudo a2enmod dav
 +sudo a2enmod dav_lock
 +sudo a2enmod dav_fs
 +</code>
 +
 +3. Reiniciar apache
 +
 +  sudo service apache2 restart
 +
 +4. Crear una config de apache:
 +
 +  sudo vim /etc/apache2/conf-available/svn.conf
 +  
 +Con el siguiente contenido:
 +
 +<code>
 +<Location /svn>
 +  DAV svn
 +  # Automatically map any "/svn/foo" URL to repository /var/svn/foo
 +  SVNParentPath /var/svn
 +</Location>
 +</code>
 +
 +5. Ajustar permisos:
 +
 +  sudo chown -R www-data:root /var/svn
 +  
 +6. Cargar config de apache:
 +
 +  sudo a2enconf svn
 +  sudo service apache2 reload
 +  
 +7. Probar:
 +
 +http://svn.example.com/svn/project_1
 +
 +Deberia ir a:
 +
 +  /var/svn/project_1
 +
 +  
 +
 +
 +==== Apache <=2.2.x y subversion <=1.7.x ====
 +
  
 http://svnbook.red-bean.com/en/1.4/svn.serverconfig.httpd.html http://svnbook.red-bean.com/en/1.4/svn.serverconfig.httpd.html
Line 172: Line 235:
  
   svn checkout http://localhost/repositorio_varios_proyectos/proyecto_1   svn checkout http://localhost/repositorio_varios_proyectos/proyecto_1
 +
 +
  
  
Line 194: Line 259:
 (Si no existe un fichero de contraseñas de apache) (Si no existe un fichero de contraseñas de apache)
  
-  htpassd -c /ruta/fichero/contrasenyas mi_usuario+  sudo htpasswd -c /ruta/fichero/contrasenyas mi_usuario
  
 (Si ya existe) (Si ya existe)
  
-  htpassd  /ruta/fichero/contrasenyas mi_usuario+  sudo htpasswd /ruta/fichero/contrasenyas mi_usuario
  
 2. Teclear 2 veces la contraseña 2. Teclear 2 veces la contraseña
Line 236: Line 301:
 (Si no existe un fichero de contraseñas de apache) (Si no existe un fichero de contraseñas de apache)
  
-  htpassd -c /ruta/fichero/contrasenyas usuario_1 +  sudo htpasswd -c /ruta/fichero/contrasenyas usuario_1 
-  htpassd -c /ruta/fichero/contrasenyas usuario_2+  sudo htpasswd /ruta/fichero/contrasenyas usuario_2
  
 (Si ya existe) (Si ya existe)
  
-  htpassd  /ruta/fichero/contrasenyas usuario_1 +  sudo htpasswd /ruta/fichero/contrasenyas usuario_1 
-  htpassd  /ruta/fichero/contrasenyas usuario_2+  sudo htpasswd /ruta/fichero/contrasenyas usuario_2 
 2. Editar: 2. Editar:
  
-  nano /etc/apache2/httpd.conf+  sudo vim /etc/apache2/httpd.conf
      
 Y dejarlo tal que así: Y dejarlo tal que así:
Line 272: Line 338:
 4. Crear el archivo de reglas: 4. Crear el archivo de reglas:
  
-  nano /ruta/fichero/reglas_subversion+  sudo vim /ruta/fichero/reglas_subversion
  
 Con el siguiente contenido: Con el siguiente contenido:
Line 413: Line 479:
  
   svnserve -d --config-file=/etc/subversion/conf/svnserve.conf -r /mnt/disco_1/datos/repositorio_varios_proyectos&   svnserve -d --config-file=/etc/subversion/conf/svnserve.conf -r /mnt/disco_1/datos/repositorio_varios_proyectos&
 +
  
 ===== Acceder a repositorio vía svn+ssh ===== ===== Acceder a repositorio vía svn+ssh =====
Line 418: Line 485:
 No requiere tener levantado svnserve. Basta con: No requiere tener levantado svnserve. Basta con:
  
-  svn co --no-auth-cache --username mi_usuario svn+ssh://ip_servidor_subversion/var/subversion/proyecto_1/trunk+  svn co --no-auth-cache svn+ssh://usuario@ip_servidor_subversion/var/subversion/proyecto_1/trunk
  
 Donde '/var/subversion' es la ruta completa al repositorio de subversion. Pedirá usuario y contraseña de una cuenta de usuario de la máquina donde esté ubicado el repositorio de subversion  Donde '/var/subversion' es la ruta completa al repositorio de subversion. Pedirá usuario y contraseña de una cuenta de usuario de la máquina donde esté ubicado el repositorio de subversion 
Line 458: Line 525:
   svn info | grep URL   svn info | grep URL
   URL: http://mi_url/subversion/proyecto_1/trunk   URL: http://mi_url/subversion/proyecto_1/trunk
 +
  
  
  
 ===== Ramas ===== ===== Ramas =====
 +
 +**NOTA** Para que el comando 'svn merge' funcione, es necesario que cliente y servidor tengan la versión 1.5+
  
 Normalmente los proyectos de subersion siguen el siguiente estándar: Normalmente los proyectos de subersion siguen el siguiente estándar:
  
   /proyecto_1/trunk   /proyecto_1/trunk
 +  /proyecto_1/branches
 +  /proyecto_1/tags
 +
 +Supongamos el siguiente esquema:
 +
 +  /proyecto_1/trunk/file.txt
   /proyecto_1/branches   /proyecto_1/branches
   /proyecto_1/tags   /proyecto_1/tags
Line 477: Line 553:
 Crear una rama: Crear una rama:
  
-1. (Desde el servidor que aloja el repositorio de subversion):+1. En el pc cliente:
  
 <code> <code>
 svn copy http://mi_repositorio/proyecto_1/trunk \ svn copy http://mi_repositorio/proyecto_1/trunk \
 http://mi_repositorio/proyecto_1/branches/version_0_7 \ http://mi_repositorio/proyecto_1/branches/version_0_7 \
--m "Creo una rama privada de /facsimile/trunk."+-m "proyecto1 - creo rama branches/version_0_7"
 </code> </code>
  
-2. (En el pc 'cliente') Descargamos una copia de trabajo de la nueva rama:+2. (En el pc 'cliente') Descargamos una copia de trabajo del proyecto:
  
-  svn co http://mi_repositorio/proyecto_1/branches/version_0_7+  svn co http://mi_repositorio/proyecto_1/
  
-**NOTA** Para que el comando 'svn merge' funcione, es necesario que cliente y servidor tengan la versión 1.5++3Trabajo en file.txt:
  
-1. Descargarse los cambios de /trunk a la copia de trabajo:+  cd branches/version_0_7 
 +  vim file.txt
  
-  svn merge http://mi_repositorio/proyecto_1/trunk+4. Subo los cambios:
  
-2. Resolver los posibles conflictos:+  svn commit -m "proyecto1 - branches/version_0_7 cambio 1"
  
-  svn status +5Sigo trabajando en file.txt:
-  svn diff +
-  ...+
  
-2.1 Si los cambios son insalvables, se puede revertir a la situación anterior:+  cd branches/version_0_7 
 +  vim file.txt
  
-  svn revert -R+6Subo los cambios:
  
-3. Enviar los cambios, una vez resuletos los conflictos, a mi rama:+  svn commit -m "proyecto1 - branches/version_0_7 cambio 2"
  
-  svn commit -m "Fundidos los cambios de /trunk a /branches/version_0_7"+7. Si ahora quiero mezclar  branches/version_0_7 -> trunk tengo que buscar la revision en la que cree la rama:
  
-4. Repetir los pasos 1-3 a menudo, para que luego no cueste tanto reintegrar '/branches/version_0_7' en 'trunk'+  svn log --verbose --stop-on-copy http://mi_repositorio/proyecto_1/branches/version_0_7
  
-5. Fundir la rama con el tronco:+Tomar la ultima revision, por ejemplo supongamos que es la 23
  
-  svn merge --reintegrate http://mi_repositorio/proyecto_1/branches/version_0_7+8. Ir a trunk y ver la revision actual:
  
-6Resolver los posibles conflictos:+  cd ../../trunk 
 +  svn info
  
-  svn status +Supongamos que es la 25
-  svn diff +
-  ...+
  
-6.1 Si los cambios son insalvables, se puede revertir a la situación anterior:+9Mezclar
  
-  svn revert . -R+  svn merge -r 23:25 http://mi_repositorio/proyecto_1/branches/version_0_7
  
-7Enviar los cambios, una vez resuletos los conflictos, en este caso a '/trunk' (ver paso 5):+10Actualizar repositorio
  
-  svn commit -m "Fundidos los cambios de /branches/version_0_7 a /trunk"+  svn commit -m "proyecto1 - mezclado branches/version_0_7 -> trunk"
  
-8Eliminar la rama, pues ya no es necesaria:+11Comprobar los cambios
  
-<code> +  mkdir /tmp/aux2 
-svn delete http://mi_repositorio/proyecto_1/branches/version_0_7 \ +  cd /tmp/aux2 
--m "Borro la rama version_0_7" +  svn co http://mi_repositorio/proyecto_1/trunk 
-</code>+  cd trunk 
 +  vim file.txt
  
-La rama puede ser resucitada [1] +http://svnbook.red-bean.com/en/1.1/ch04s04.html  
- +  
-[1] http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.resurrect +
- +
-9. Para crear otra rama: +
- +
-9.1 Copiar el tronco a una copia de trabajo: +
- +
-<code> +
-svn copy http://mi_repositorio/proyecto_1/trunk \ +
-http://mi_repositorio/proyecto_1/branches/version_0_8 \ +
--m "Creo una rama privada de /facsimile/trunk." +
-</code> +
- +
-9.2 Entrar en el interior de esa copia de trabajo: +
- +
-  cd /ruta/branches/version_0_8 +
- +
-9.3 Actualizar la copia de trabajo reflejando que es un directorio, dentro del repositorio, distinto: +
- +
-  svn switch http://mi_repositorio/proyecto_1/branches/version_0_8 +
- +
-No es necesario 'switch', vale un 'update'. Ver http://svnbook.red-bean.com/en/1.5/svn.branchmerge.switchwc.html+
  
 ===== Mezclando ramas ===== ===== Mezclando ramas =====
Line 674: Line 729:
  
   svn delete file://ruta/repositorio/proyecto/trunk/dir_1   svn delete file://ruta/repositorio/proyecto/trunk/dir_1
 +
 +
 +
  
 ===== Copia de seguridad ===== ===== Copia de seguridad =====
Line 679: Line 737:
   svnadmin hotcopy /ruta/mi/repositorio /ruta/repositorio_copia_seguridad   svnadmin hotcopy /ruta/mi/repositorio /ruta/repositorio_copia_seguridad
  
-Teóricamente después se puede mover/ruta/repositorio_copia_seguridad como un directorio más en otra máquina, y configurando su acceso (por http://svn:// ...) ya tenemos el mismo repositorio levantado+Teóricamente después se puede mover/ruta/repositorio_copia_seguridad como un directorio más en otra máquina, y configurando su acceso
 + 
 +  *http://... 
 +  *svn://... 
 + 
 +Ya tenemos el mismo repositorio levantado 
 + 
 +Para exportar el repositorio (útil cuando hay conflictos de versiones): 
 + 
 +  svnadmin dump /ruta/repositorio > volcado_repositorio.dbd 
 + 
 +Para importarlo: 
 + 
 +  svnadmin create /ruta/nuevo_repositorio 
 +  svnadmin load /ruta/nuevo_repositorio < volcado_repositorio.dbd 
 + 
 + 
 + 
 + 
 +===== Errores ====== 
 + 
 +  ***svn: Error analizando parámetros** 
 + 
 +  ***svn: Could not open the requested SVN filesystem** 
 + 
 +  ***svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://peluca.mine.nu/subversion/facsimile'** 
 + 
 +  ***svn: Se esperaba un formato de FS entre 1 y '3', se encontró '4'** 
 + 
 +Se está intentando acceder a un repositorio de una versión de subversión posterior (1.6) a la instalada (1.5). 
 + 
 +Solución: 
 + 
 +1. Desde una máquina con una versión de subversión igual a la del repositorio (1.6): 
 + 
 +  svnadmin dump /ruta/repositorio > volcado_repositorio.dbd 
 +   
 +2. Desde el servidor con la versión antigua (1.5) creamos un nuevo repositorio limpio: 
 + 
 +  svnadmin create /ruta/nuevo_repositorio 
 + 
 +3. Cargamos el volcado generado en el paso 1: 
 + 
 +  svnadmin load /ruta/nuevo_repositorio < volcado_repositorio.dbd 
 + 
 + 
 +===== Descargar un solo archivo ====== 
 + 
 +  svn update http://repositorio_subversion/proyecto/mi_archivo.c 
 + 
 + 
 +===== Listar revisiones ====== 
 + 
 +*Nota* puede requerir primero: 
 + 
 +  svn update 
 + 
 +Y luego: 
 + 
 +  svn log 
 + 
 + 
 + 
 +===== Comprobar si existen versiones nuevas en el repositorio ====== 
 + 
 +<code> 
 +svn st -u --no-auth-cache --username=USER 
 +Authentication realm: <http://URL_REPOSITORY> xxx Repository 
 +Password for 'USER':  
 +        *   225051   generic-ci/generic-service-check.sh 
 +        *   225051   generic-ci/generic-service-remove.sh 
 +        *            file2.sh 
 +        *   225051   . 
 +Status against revision: 234242 
 +</code> 
 + 
 +*   225051 -> existe una nueva version en el servidor 
 + 
 +===== Merge inverso o revertir a una revision concreta ====== 
 + 
 +  * *PROBLEMA* queremos eliminar las ultimas x revisiones de un proyecto 
 + 
 +1. Listar las revisiones 
 + 
 + 
 +<code> 
 +cd /ruta/copia/local 
 + 
 +svn log 
 + 
 +------------------------------------------------------------------------ 
 +r1132 | root | 2012-06-18 15:45:06 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +back without symlinks 
 +------------------------------------------------------------------------ 
 +r1131 | usuario | 2012-06-18 15:07:16 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks sudo 
 +------------------------------------------------------------------------ 
 +r1130 | usuario | 2012-06-18 15:05:41 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks ssh 
 +------------------------------------------------------------------------ 
 +r1129 | usuario | 2012-06-18 15:04:50 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks module puppet cont and snmp 
 +------------------------------------------------------------------------ 
 +r1128 | usuario | 2012-06-18 15:03:26 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks module puppet 
 +------------------------------------------------------------------------ 
 +r1127 | usuario | 2012-06-18 14:58:34 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks module ntp 
 +------------------------------------------------------------------------ 
 +r1126 | usuario | 2012-06-18 14:52:25 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks module nfs 
 +------------------------------------------------------------------------ 
 +r1125 | usuario | 2012-06-18 14:46:01 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks module apt 
 +------------------------------------------------------------------------ 
 +r1124 | usuario | 2012-06-18 14:42:23 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks test 3 
 +------------------------------------------------------------------------ 
 +r1123 | usuario | 2012-06-18 14:40:23 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +puppet symlinks test 2 
 +------------------------------------------------------------------------ 
 +r1122 | usuario | 2012-06-18 14:38:53 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +test symlinks puppet 
 +------------------------------------------------------------------------ 
 +r1121 | root | 2012-06-18 14:25:24 +0200 (Mon, 18 Jun 2012) | 1 line 
 + 
 +Initial feed 
 +------------------------------------------------------------------------ 
 +</code> 
 + 
 +2. Queremos volver a la version inicial (r1121): 
 + 
 +  sudo svn merge -r1132:1120 . 
 + 
 +3. Hacemos el commit: 
 + 
 +  svn commit -m 'revert to r1120' 
 + 
 +===== Copiar directorio evitando .svn ====== 
 + 
 +  sudo rsync -r --exclude=.svn /ruta/origen /ruta/destino 
informatica/linux/subversion.1257407274.txt.gz · Last modified: 2015/04/13 20:19 (external edit)