Concepto de Subversión
Subversion es una versión gratuita y de código abierto sistema de control (VCS).Esto es, Subversion maneja ficheros y directorios, y los cambios introducidos en ellos, con el tiempo. Esto le permite recuperar versiones antiguas de sus datos o examinar la historia de cómo cambiaron sus datos. En este sentido, muchas personas piensan de un sistema de control de versiones como una especie de "máquina del tiempo".
Subversion puede operar a través de redes, que permite que sea utilizado por personas en diferentes equipos. En algún nivel, la capacidad para que varias personas puedan modificar y administrar el mismo conjunto de datos de sus respectivas ubicaciones fomenta la colaboración. Se puede progresar mas rápidamente sin un único conducto a través del cual todas las modificaciones que se producen. Y porque el trabajo está en versiones, no tienen por qué temer que la calidad es la compensación por la pérdida de ese conducto, si es un cambio incorrecto que se haga de los datos, simplemente deshacer el cambio.
Algunos sistemas de control de versiones también son software de gestión de configuración (SCM). Estos sistemas están diseñados específicamente para manejar árboles de código fuente y tienen muchas características que son específicas de desarrollo de software, tales como el entendimiento nativo de lenguajes de programación, o proporcionan herramientas para la construcción de software. Subversion, sin embargo, no es uno de estos sistemas. Se trata de un sistema general que puede ser utilizado para manejar cualquier colección de archivos. Para usted, esos ficheros pueden ser de código fuente para otros, cualquier cosa, desde listas de compras de comestibles para combinaciones de vídeo digital y más allá.
Ventajas:
Entre las ventajas más notables que SVN tiene sobre CVS:
· Poder renombrar ficheros en el repositorio, sin perder la historia.
· Y una gestión más eficiente de ficheros binarios en el repositorio
· La distribución de SVN viene con scripts que te permitirán migrar repositorios de CVS a SVN prácticamente sin pérdida de información.
· Se sigue la historia de los archivos y directorios a través de copias y renombrados.
Desventajas:
· El manejo de cambio de nombres de archivos no es completo.
· No resuelve el problema de aplicar repetidamente parches entre ramas, no facilita llevar la cuenta de qué cambios se han realizado.
Como montar un servidor Subversion
Instalacion y configuracion de Subversion
Primer paso: Instalación de las herramientas necesarias
Instalamos los paquetes que nos hacen falta para crear repositorios:
sudo aptitude install subversion subversion-tools
Necesitamos dos módulos de apache instalados en nuestro servidor, si haremos uso de svn a través de internet… (obvio, al menos para mí)
Los modulos son dav y dav_svn. Para comprobar que los tenemos:
a2enmod dav
a2enmod dav_svn
Si no estaban instalados, los instalamos:
sudo aptitude install libapache2-svn
Segundo paso: Creación de grupos y usuarios permitidos
Creamos un grupo subversion para manejar fácilmente los permisos
groupadd subversion
Añadimos a dicho grupo los usuarios que queremos que usen de algún modo nuestro servidor
usermod -a -Gsubversion user1
usermod -a -Gsubversion user2
usermod -a -Gsubversion user3
Ahora pasamos a crear los ficheros de acceso, que guardan los nombres y contraseñas de esos usuarios que harán uso del repositorio:
htpasswd2 -c /etc/apache2/dav_svn.passwd user1
htpasswd2 /etc/apache2/dav_svn.passwd user2
htpasswd2 /etc/apache2/dav_svn.passwd user3
El primero lleva -c por la simple razón de que crea el fichero. Los demás se añaden a él.
Cada vez que introduzcamos un usuario, se nos pedirá su nueva contraseña.
Tercer paso: Creación de un repositorio
Ahora creamos la carpeta donde ubicaremos el repositorio:
sudo mkdir /home/SVN
sudo svnadmin create /home/SVN
Y le damos los correspondientes permisos
chown -R www-data:subversion /home/svn/
chmod -R 770 /home/svn/
Cuarto paso: Configurando Apache para los repositorios
Pasamos a configurar el fichero que gestiona el módulo de apache para el svn:
sudo gedit /etc/apache2/mods-available/dav_svn.conf
Dentro ponemos esta configuración:
##
# SVN
#
DAV svn
SVNPath /home/svn
AuthType Basic
AuthName "Repositorio Subversion del proyecto"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
Si queremos quitar el modo lectura a cualquiera, porque nuestro proyecto sea confidencial o no queramos que sea visto desde fuera, basta reemplazar la sección:
Require valid-user
por
Require valid-user
Reiniciamos el servicio de apache para que nos rearranque con los cambios introducidos.
sudo /etc/init.d/apache2 restart
Manejo de Usuarios en Subversion
Agregar Usuarios al Subversion
Para Agregar usuarios al Subversion, es necesario editar dos ficheros.
Fichero Authz
En este fichero se almacenan los permisos de los usuarios a los repositorios, esta conformado por las siguientes directivas:
Directiva Groups:
[groups]
admins = usuario1,usuario2
En esta directiva se crean los grupos de usuarios, y se asignan los usuarios pertenecientes a estos separados por comas (,) como se muestran en el ejemplo anterior. Cada grupo de usuarios se debe crear en una línea diferente y se pueden asignar cuantos usuarios sean necesarios.
Directiva de Repositorios:
[repo1:/]
@admins = rw
* =
En esta directiva se asigna la permisología a cada repositorio existente, se encierra entre corchetes [ ] el nombre del repositorio de la forma que se indica arriba. Luego se asignan los grupos que tendrán acceso a este y el tipo de acceso que tendrán “r” para lectura y “w” para escritura. Por último se le quitan los permisos a los demás usuarios con “* =” Se pueden poner tantos repositorios como sean necesarios.
El segundo fichero es el passwd-digest
Este fichero contiene los usuarios con el Shadow Password el cual podemos copiar de algun servidor, o generar un nuevo password con el htpasswd en linux.
Comandos de Subversión
Comando | Descripción |
svn - help | Lista de los comandos de Subversion |
svn comando de ayuda También:? o h | Ayuda en dado "orden" |
svn add nombre de archivo svn add directorio | Agregar un archivo o directorio a Subversion control de CM. También se debe realizar: svn ci nombre de archivo (o svn commit) para cargar el archivo o directorio. El archivo no estará disponible en el repositorio hasta que un "compromiso" se lleva a cabo. Si la adición de un directorio, el directorio y todos sus contenidos de forma recursiva se agregan. es decir: svn ci directorio svn commit de la guía svn commit. |
svn culpa archivo svn culpa-r RevisionNumber nombre de archivo También: alabanza, anotar, ann | Mostrar contenido del archivo con las modificaciones anotadas con información del autor. |
svn cat nombrearchivo | Lista el contenido de archivo bajo control de Subversion. |
svn checkout nodo http:// de nombre / repositorio / svn / trunk /parentPath / ruta Esto crea: path/file1 path/file2 ... svn checkout nodo http:// de nombre / repositorio / svn / trunk /parentPath. Esto crea: path/file1 path/file2 ... Tenga en cuenta la diferencia que un "." hace. svn checkout archivo: / / / repositorio / svn / trunk / ruta / svn co-r 497-nodo del nombre http:// / repositorio / svn / trunk / archivo-nombre de la ruta También: svn co https ://..., ://... svn, y ssh + svn: / / MS / Windows: svn co file: / / / c: / repositorio / proyecto / trunk | Pedido todos los archivos de la ruta de acceso y subdirectorios se especifican a continuación. Crea "de trabajo" copia de los archivos y directorios. Pedido un repositorio. Utilice la opción "-r" para especificar una revisión en concreto que no sea la última. La dirección URL "svn: / /" se comunica con un servidor SVN (puerto 3690) La dirección URL "http://" se comunica con el servidor Apache ymod_dav_svn módulo (puerto 80) [comunes servidor más] |
svn de limpieza | la subversión de limpieza de los archivos resultantes de los procesos se escapó y se estrelló. |
svn commit nombre de archivo svn commit - message "mensaje va aquí." nombre de archivo svn commit-m "Mensaje va aquí." nombre de archivo svn ci archivo1 archivo2 nombreDeArchivo3 svn ci. | Check-in (cometer) locales "trabajo" de archivos, archivos o directorios y contenidos (recursivamente) en el repositorio Subversion. Atómica, es decir, todos comprometidos o no, no incompleta de check-in. |
svn copy fuente destination_clone ... Cp: También svn | Copia de archivos o el árbol de directorios. Se puede copiar de una copia local de trabajo a otro o para la dirección URL del servidor repositorio. Las fuentes y los destinos pueden ser copias de trabajo o URLs. |
svn http:// acogida copia / repositorio / proyecto / host http:// tronco / repositorio / proyecto / tags / TagName-1.4.5-m"etiqueta de versión 1.4.5" | Etiqueta un comunicado. Toma una instantánea del repositorio y le asigna un nombre. Esto se puede realizar en cualquier sucursal de la guía. |
svn copy. http:// host / repositorio / proyecto / tags / TagName-1.4.5-m "etiqueta de versión 1.4.5" | Etiqueta un comunicado. Toma una instantánea de su copia de trabajo local y asigna un nombre. Esto se puede realizar en cualquier sucursal de la guía. |
svn eliminar nombre de archivo svn eliminar directorio También: del, eliminar o rm svn rm http://host/repos/project/trunk/ archivo o directorio | Eliminar archivos del repositorio. El comando rm UNIX de nombre de archivo. Debe realizar un "compromiso" para actualizar el directorio del repositorio y locales que trabajan con los cambios. es decir: svn commit. |
svn diff nombre de archivo svn di nombre de archivo | Mostrar archivos diffs entre repositorio SVN y sus cambios en los archivos usando el archivo en formato GNU diff. Utilice las herramientas de esta interfaz gráfica de usuario como se muestra a continuación. |
svn diff-r rev1: rev2 nombre de archivo | Mostrar archivos diffs entre versiones especificadas. Ejemplo: svn diff-r 456:459 subfn.cpp Utilizando esta herramienta de interfaz gráfica de usuario: svn diff-r 457:459 - diff-cmd kdiff3 de nombre de archivo |
svn diff nombre de archivo> archivo de parche | parche Generar archivo utilizado por el comando patch . |
svn directorio de exportación | Exportación árbol de directorios de su sistema de archivos pero no será un "directorio de trabajo" bajo el control de SVN. |
svn de exportación-r-Rev número de nodo-http:// nombre / ruta | árbol de exportación de la guía de la versión especificada y crear árbol de directorios y archivos locales que no están bajo el control de SVN. |
svn import local de la guía http:// nodo / repositorio / svn / trunk / directorio | Añadir directorio (y los archivos en forma recursiva) a la ruta en el repositorio especificado. |
svn info Nombre de archivo | Mostrar información sobre el archivo o directorio. (Fecha de cambio, el autor, la revisión, la ruta en el repositorio.) No se puede especificar una dirección URL. |
svn directorio de listas svn lista de nombre de archivo | Lista de archivo o directorio de archivos en el repositorio. Se utiliza para ver repositorio antes de pagar. Si el directorio actual es determinado(lista de svn. /), Subversion lista de la URL del repositorio del directorio actual. |
lista de svn-r directorio RevisionNumber | Lista de directorios de archivos en el repositorio en la revisión especificada. |
svn bloqueo de nombre de archivo-m "comentario sobre por qué su llave o por quién" (El comentario no es necesaria, pero a menudo es útil) | archivo de bloqueo para permitir el acceso exclusivo a uno y prohibir todos los demás. Una confirmación abrirá el archivo (a menos que el "- no-unlock" opción se utiliza). El bloqueo se puede quitar con los comandos: svn desbloquear nombre de archivo, svnlook y comandos de la svnadmin(es decir, la lista: lslocks svnadmin y quitar: rmlocks svnadmin nombre de archivo). |
svn registro de nombre de archivo svn log. registro http:// URL svn / ruta / archivo svn log-v. svn log-r RevisionNumber dirección http:// / ruta / archivo | Mostrar los mensajes de registro de Subversion para un sistema de revisión (s) y / o archivo (s) y / o todos los contenidos directamente en el repositorio. Lista detallada. Incluye una lista de todos los archivos en el cambio Muestra los cambios en los archivos asociados con el número de revisión. |
svn merge url/path/branch1 http:// http:// url/path/branch2 de trabajo-local-dir svn merge archivo1 archivo2 @ @ revJ revK svn merge-r 414:411 url http:// / ruta de trabajo-dir svn merge-r 413: CABEZA de nombre de archivo | Combinar cambios de directorio en su directorio de trabajo actual o combinar un archivo en Subversion en el archivo en su directorio de trabajo.Si el objetivo no se especifica, el directorio actual o idéntico nombre base se asume. Se utiliza para incorporar los cambios en comprobar que no tienen en cuenta en su archivo o para fusionar las ramas. Ejemplo mediante la GUI herramienta de combinación: svn diff-r 459:454 --cmd esta kdiff3 - 'm' extensiones de archivo de nombre A continuación, dígale a la subversión que los conflictos se han resuelto: svn resolver de nombre de archivo Por último, el check-in de archivo: svn ci nombre de archivo o cancelar los cambios: svn revert de nombre de archivo |
svn merge - dry-run-r 414:413 url http:// / ruta | Prueba de combinación de correspondencia. No se realizan cambios a su copia de trabajo local, pero muestra los comentarios de Subversion, como si se llevó a cabo fusión. |
svn merge-r 414:413 url http:// / ruta svn merge-r 414:413. | Deshacer los cambios realizados cometido en la revisión 414. |
svn mkdir directorio svn mkdir URL http:// / directorio | Crear un nuevo directorio bajo control de versiones. |
svn mover directory1 directorio2 svn mv directory1 directorio2 mv archivo de edad de nombre de archivo svn-nuevo nombre | Cambiar el nombre o mover un archivo o directorio. Mueve / renombra el archivo / directorio en el repositorio y en el área de trabajo local. Debe realizar svn ci-archivo nuevo nombre después de la mudanza para que los cambios que tendrá lugar en el repositorio. |
svn revert fichero | Deshacer los cambios en los archivos de trabajo locales. Deseche los cambios locales. |
svn resolved nombre de archivo | Ejecute este comando después de resolver los conflictos de fusión.Siguiente "cometer" los cambios. |
svn status svn status-u svn status-u. svn status-UQ. | Mostrar el estado de cambios en los archivos en el directorio actual y recursivamente en directorios por debajo. Mostrar información de archivo de fecha: svn status - show-updates (Equivalente: svn status-u) -U: Determina el estado mediante la comparación de su repositorio local con el servidor de repositorio. Sin esta opción, el estado sólo se muestra serán los cambios que has hecho en tu repositorio local. -Q: Calma. No imprimir ": Archivo no / directorio bajo control de versiones" o ": Archivo / directorio que falta" información extraña. En primer lugar collumn: - R: El archivo que se agregará
- C: Los cambios conflictivos
- D: El archivo que desea borrar
- G: El archivo se va a combinar con las actualizaciones del servidor
- M: El archivo ha sido modificado
- R: El archivo que se sustituye
- G: El archivo que se fusionen
- X: El recurso es externo al repositorio (svn: externals)
- ?: Archivo / directorio no bajo control de versiones
- !: Archivo / directorio desaparecidos
- ~: Ítem versionado obstruido por algún elemento de un tipo diferente.
En segundo lugar collumn: Modificación de las propiedades - '' No hay modificaciones. La copia de trabajo es hasta la fecha.
- "C" En conflicto
- 'M' Modificado
- Archivo local '*' diferente del repositorio. Una revisión más reciente en el servidor. Actualización dará lugar a fusionar o posible conflicto.
En tercer lugar collumn: Seguros - '' No está bloqueada
- 'L' bloqueado
- "S" cambia a una rama
|
svn http://server/new-branch interruptor svn switch - relocate http://server/new-path http://server/old-path | Cambiar su copia de trabajo local para reflejar una nueva rama del repositorio en lugar de tronco o la rama anterior. También le permite a punto de su repositorio a un nuevo camino en el servidor si los cambios de ruta del servidor desde el que realizó un hotel. |
svn update svn update nombre de archivo svn update-r458 nombre de archivo svn update - ignore-externals /. | Migrar todas las actualizaciones de repositorio de Subversion a tu copia local (recusively para todos los archivos en el directorio actual y todos por debajo de ella). Si ha habido cambios a la repositorio SVN desde el que descargó los archivos, la subversión le dará la oportunidad de combinar.Estado de los archivos se utiliza la codificación como se ha dicho de "estado". Los archivos marcados con una "C" (conflicto) deberían fusionarse de revertir. Si se fusionó entonces se puede realizar una "resolución" y un "check-in". Si un nombre de archivo se especifica, sólo que el archivo se actualiza. También se puede sincronizar a una revisión especifica propuesta por-r. Utilice - ignore-externals para evitar el procesamiento lento de lo externo a un servidor de Internet potencialmente lenta distantes. |
Bibliografía:
Rhommel Lamas [disponible en línea] http://techironic.com/index.php/2009/06/18/manejo-de-subversion-creacion-de-repositorios/
Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilat [disponible en Linea] VERSION CONTROL WITH SUBVERSION http://svnbook.red-bean.com/nightly/en/svn-book.pdf
Ubuntu Life http://ubuntulife.wordpress.com/2007/05/29/instalar-un-servidor-de-subversion-en-ubuntu/