LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 
Guía (muy) rápida para Subversion

Esto es una guía muy rápida para manejar subversión, servirá tanto a los
programadores poder trabajar en grupo, a través de un CVS, como para los
administradores tenerlo bien administrado.

CONCEPTOS BÁSICOS.

* Repositorio: Lugar donde se lleva el desarrollo CVS, al que el/los programadores
 subirán/actualizarán los cambios realizados en sus máquinas locales.) (las
 actualizaciones de las BBDD las realiza subversion automáticamente)

* Sistema de Acceso:
    * file://Sistema local. (veremos este)
    * http:// y https// Usando el módulo DAV de Apache2
    * svn:// por svnserve y
    * svn+ssh:// para usar Secure Shell (trataremos de ver este)


------------
CREAR UN (NUEVO) REPOSITORIO SVN
------------

Creamos el directorio:
    mkdir /home/usuario/svn
    mkdir /home/usuario/svn/Proyecto
Le decimos a SVN que creamos el (NUEVO) repositorio
    svnadmin create /home/usuario/svn/Proyecto
Comprobamos que todo ha ido bien:

	svn checkout file:///home/usuario/svn/Proyecto/
+---------------------------------------------------------------+
|								|
|Si el repositorio lo hubieramos creado en una máquina debemos	|
|introducir su IP y hacerla accesible por ssh y sería		|
|								|
|svn checkout svn+ssh://nombre-o-ip/home/user/algo/svn	|
|								|
+---------------------------------------------------------------+
YA TENEMOS CREADO EL NUEVO REPOSITORIO DE SVN
***********************************************

------------
IMPORTAR/CREAR UN (NUEVO) PROYECTO PARA SUBIR AL REPOSITORIO.
-----------------------
En el siguiente directorio colocará su desarrollo de software en la
carpeta "trunk" y este subirá al nuevo repositorio. (AQUI, es sólo una Carpeta de Trabajo)
-----------------------

mkdir /home/usuario/AQUI/
mkdir /home/usuario/AQUI/trunk
mkdir /home/usuario/AQUI/branches
mkdir /home/usuario/AQUI/tags

RECUERDA, el contenido debe estar en la carpeta "trunk"
El REPOSITORIO se llamará Proyecto. y "AQUI" es sólo nuestra
"primera" carpeta de trabajo.

Si no tenemos nada, copiamos algo, y ejecutamos...

svn import /home/usuario/AQUI   file:///home/usuario/svn/Proyecto -m "Importe Inicial"

Añadiendo      /home/usuario/AQUI/trunk/cablenfs2.sh
Añadiendo      /home/usuario/AQUI/trunk/copiaseg.sh
Añadiendo      /home/usuario/AQUI/trunk/index.php
Añadiendo      /home/usuario/AQUI/trunk/bws4.html
Añadiendo      /home/usuario/AQUI/trunk/cws2.html
Añadiendo      /home/usuario/AQUI/trunk/maindb.php
Añadiendo      /home/usuario/AQUI/braches
Añadiendo      /home/usuario/AQUI/tags

Commit de la revisión 1.
**********************************************************
YA TENEMOS CREADO/IMPORTADO EL NUEVO PROYECTO DE SVN
**********************************************************
Si el repositorio no está en local (file:///) si no en un servidor separado
deberíamos utilizar:
 svn checkout svn+ssh://nombre-o-ip/home/user/svn/Proyecto
**********************************************************

---------------------------------
Ahora, TRABAJAREMOS en una carpeta separada, esto es importante, usted u otras
personas deberán crear en otro directorio al que llamaremos "C"
e importar el contenido del repositorio, del proyecto "Proyecto"

Pues creamos "C" escribiendo: mkdir C
accedemos a la carpeta "C" escribiendo: cd C
y escribimos:
svn checkout file:///home/usuario/svn/Proyecto
escrimos "ls Proyecto" y veremos el contenido de AQUI en C

---------------------
La carpeta "C" se denomina Working Copy, y es una carpeta de trabajo
donde realizará los cambios que posteriormente se subirá al repositorio.
----------------------

Una vez que ya tenemos subido parte del proyecto, vamos creando en
nuestra carpeta de trabajo, carpetas y ficheros, estos...
también podemos añadirlos al repositorio con el comando...

svn add FICHERO:

(Ej. creamos un directorio, importante escribir svn mkdir test)

[usuario@localhost Proyecto]$ svn mkdir test
A         test
[usuario@localhost Proyecto]$ cd test
[usuario@localhost test]$ touch test1
[usuario@localhost test]$ touch test2
[usuario@localhost test]$ svn add test1
A         test1
[crysania:~/web/test ]$ svn add test2
A         test1

Actualizamos el contenido de nuestra carpeta de trabajo
con la del repositorio...

[usuario@localhost test]$svn commit -m "Actualizacion"

Añadiendo      test
Añadiendo      test/test1
Añadiendo      test/test2

Transmitiendo contenido de archivos ..
Commit de la revisión 2.

También es posible que tengamos que borrar contenido
[usuario@localhost test]$ svn delete test2
D         test2

Con lo cual, tendremos que volver a actualizar el contenido
del respositorio.

[usuario@localhost test]$ svn commit -m "Actualizacion"
Eliminando     test/test2

Commit de la revisión 3.

Para ver el contenido del repositorio

svn list file:///home/usuario/svn/Proyecto

Ahora, el contenido de AQUI, no está actualizado, ya que todo el trabajo estará
el el proyecto "Proyecto"

Si quieres actualizar AQUI, tras acceder a la carpeta

[usuario@localhost ~]$ cd
[usuario@localhost ~]$ cd AQUI/
[usuario@localhost AQUI]$ ls
total 12K
4,0K braches/  4,0K tags/  4,0K trunk/

(Vemos que no está la carpeta "Proyecto")

[usuario@localhost AQUI]$ svn checkout file:///home/usuario/svn/Proyecto/
A    Proyecto/trunk
A    Proyecto/trunk/test
A    Proyecto/trunk/test/test1
A    Proyecto/trunk/test/test2
A    Proyecto/trunk/nfs1.sh
A    Proyecto/trunk/wikieventos.sh
A    Proyecto/trunk/hola.txt
A    Proyecto/trunk/nfs2.sh
A    Proyecto/trunk/copiaseg.sh
A    Proyecto/trunk/ws10.sh
A    Proyecto/trunk/1maindb.sh
A    Proyecto/trunk/nws4.sh
A    Proyecto/trunk/ws2.sh
A    Proyecto/trunk/2mezcla.sh
A    Proyecto/trunk/nws6.sh
A    Proyecto/trunk/nfs8.sh
A    Proyecto/trunk/nws8.sh
A    Proyecto/braches
A    Proyecto/tags
Revisión obtenida: 2

[usuario@localhost AQUI]$ Ahora, el "nuevo" proyecto estará en "Proyecto".

======================================
NOTAS PRACTICAS:
======================================
Si te equivocas (durante el transcurso del curso), pues repites, busca con

find . -iname "*svn*"

Borras, para volver a repetir

Y resulta, que una vez que aprendas a utilizarlo desde la consola, no querrás ninguna GUI.

======================================
P.D.: Una vez que lo tengas en explotación, no hagas lo que se indica que en las notas prácticas.
=====================
Algunos subcomandos de Subervsión y algunas instrucciones:

add Añadir ficheros al repositorio.
cat
Ver el contenido del fichero del repositorio.
import
Importar al repositorio el contenido de la carpeta de trabajo (al principio)
checkout
Obtener del repositorio el contenido de los ficheros.
commit
Actualizar / Quitar / Poner ficheros del repositorio. (previa: update/add/del)
update
Registrar actualizaciones al repositorio por modificaciones en los ficheros.
diff
Buscar diferencias entre el Repositorio y la copia de trabajo.
list
Listar el contenido del repositorio
del
Eliminar ficheros del repositorio
resolved
Resolver conflictos de versiones de ficheros
status
Verificación del estado actual del repositorio local
log
$ svn log -v -r Revisión de los cambios entre versiones
info
Solicitud de información para un archivo
blame
svn blame filename para ver información sobre la revisión y el autor
revert
Revierte el último commit
cleanup
Elimina el bloqueo de la copia local
copy
copia un fichero como otro
export
Exporta el proyecto sin número de versión.



Conflictos, diferencias e historial

Veamos ahora como manejar los cambios y los problemas que surgen.

Conflictos

Normalmente cuando actualizamos un fichero a nuestra copia local solemos obtener el siguente resultado:

crysania:~/web $ svn update
U art/apache/index.html
Updated to revision 2.

Sin embargo si estamos trabajando sobre una version desactualizada del fichero, es decir se han realizado cambios en el repositorio, pueden ocurrir dos cosas.

Que las modificaciones sean diferentes por lo tanto no hay que hacer nada ya que svn se encarga de mezclar ambas versiones:

crysania:~/web $ svn update
G art/apache/index.html
Updated to revision 3.

O bien que las modificaciones sean en la misma region con lo que no se podran mezclar ambas: conflicto. En este caso svn generara tres archivos para manejar el conflicto:

crysania:~/web/art/apache $ svn update
C index.html
Updated to revision 4.
# Tenemos un conflicto en este fichero y svn genera:
crysania:~/web/art/apache $ ls -1 index.html.*
index.htm.mine
index.htm.r3
index.htm.r4

Siendo: .mine la version con la que estamos trabajando, .r3 la version que habia en el repositorio sobre la que estabamos trabajando y .r4 la version actual del repositorio. Ademas en index.html tendremos marcados los conflictos de la misma manera que los teniamos en cvs.

Se procede a corregir las regiones que esten en conflicto en el fichero base y se utiliza svn resolved FICHERO:

crysania:~/web/art/apache $ svn resolved index.html
Resolved conflicted state of 'acmfi.htm'
# Una vez resuelto el conflicto se eliminan los ficheros axuliares:
crysania:~/web/art/apache $ ls index.html.*
ls: index.html.*: No existe el fichero o el directorio
# No olvidarse de mandar los cambios
crysania:~/web/art/apache $ svn commit index.html
-m 'Cambios en la organizacion'
Sending index.html
Transmitting file data .
Committed revision 5.

Diferencias e historiales

Otra de las comodidades de svn se aprecia en la realizacion de parches y en la revision del historial ya que para ambos casos no es necesario conectarse con el repositorio.

Para obtener los cambios realizados en nuestra copia local utilizaremos svn diff {FICHERO}* que nos da una salida valida para enviar parches (ademas de comprobar los cambios antes de enviarlos al repositorio).

crysania:~/web/art/apache $ svn diff index.html
Index: index.html
===================================================================
--- index.html (revision 4)
+++ index.html (working copy)
@@ -1,3 +1,4 @@
+



Para revisar el historial (todos esos sarcasmos que se suelen utilizar en los --message de los commit) simplemente utilizar el comando svn log {FICHERO}*.

 



=================

Comentarios  

# Jazming 30-12-2012 21:12
Gracias, era todo lo que necesitava! ;-)

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías