LinuxParty
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/ProyectoLe decimos a SVN que creamos el (NUEVO) repositorio
svnadmin create /home/usuario/svn/ProyectoComprobamos 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}*.
=================
-
Programación
- Cómo instalar y utilizar Scikit-Learn en Linux
- Thomas E. Kurtz, coinventor de BASIC, muere a los 96 años
- Profesor de informática del MIT prueba el impacto de la IA en la formación de programadores
- Lanzamiento del IDE de código abierto Qt Creator 14 con soporte para complementos basados en Lua
- Plantillas para Joomla - Episodio 1: Plantillas, marcos y clubes o no...
- Este es el mejor libro que he visto para aprender a programar en Python en castellano desde cero, gratis y online
- ¿Deberían los niños seguir aprendiendo a programar en la era de la IA?
- La 'obsolescencia' de VBScript confirmada por Microsoft y su eventual eliminación de Windows
- El Gran Debate: ¿Deberían los Modelos de Inteligencia Artificial Ser de Código Abierto?
- El lenguaje de programación BASIC cumple 60 años
- El CEO de Nvidia dice que los niños no deberían aprender a programar
- 40 años de Turbo Pascal: recuerdos del dinosaurio codificador que revolucionó los IDE
- Los lenguajes de programación más populares y dónde aprenderlos.
- Top 5 de los principales lenguajes de programación para desarrollar aplicaciones de escritorio Linux
- Qt Creator 12 lanzado con complementos de grabación de pantalla y Explorador de compiladores
Comentarios