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
Last revisionBoth sides next revision
informatica:linux:subversion [2010/01/15 05:55] 192.168.1.30informatica:linux:subversion [2015/01/22 11:58] – [Subversion y apache] javi
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 697: Line 752:
   svnadmin create /ruta/nuevo_repositorio   svnadmin create /ruta/nuevo_repositorio
   svnadmin load /ruta/nuevo_repositorio < volcado_repositorio.dbd   svnadmin load /ruta/nuevo_repositorio < volcado_repositorio.dbd
 +
 +
  
  
Line 706: Line 763:
  
   ***svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://peluca.mine.nu/subversion/facsimile'**   ***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.txt · Last modified: 2015/04/13 20:19 by 127.0.0.1