Custom Search
Bloggers Activos
Emacs como IDE para CakePHP aarkerio
La Negación del Viaje Lunar tonathiu
Porque los mononeurones si tenemos madre! blacksoul
BrunoFerías thot
The Art vendaval
Aclimatación extraterrestre ¿para qué? ahuramazdah
¿A que le tienes miedo? teosho
Sobre nazis, terror y medios tonathiu
Amenazas a la cuarta dimensión ¿de veras? ahuramazdah
Tarjeta Broadcom BCM94311MCG rev 02 teosho
Last Download
Segunda Fundación
Segunda Fundación
Pidiendo OpenSolaris 2008.5
vendaval
Sospechosismo
aarkerio
Slackware 12.1 Final
vendaval
Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D
asarch
Linux hot girl
aarkerio
Calderón puede ser sujeto a juicio político, sostiene Carrancá
tonathiu
La desnutrición en México
aarkerio
Sistema Infalible
ordbal
Histórico
aarkerio
Nietzsche en la FCPyS
aarkerio
Google Groups Karamelo
Visit this group
GNU/Linux
GNU/Linux
Hacktivismo
Hacktivismo
Debian
Debian
NetBSD
NetBSD
WWW
WWW
Guia Linux
Guia Linux
Server Side
Server Side
Ofimatica
Ofimatica
Despabilando...
Despabilando...
Mundo Maya
Mundo Maya
Literatura
Literatura
Agora
Agora
Psicologia
Psicologia
Economia
Economia
Ambientalismo
Ambientalismo
Desarrollo
Desarrollo
Biologia
Biologia
The Hackers OS
The Hackers OS

Hacktivism

LinuxChix button

Desarrollo \ Apuntes sobre Subversion
Desarrollo
Apuntes sobre Subversion

Este artículo ha sido consultado en 1,604 ocasiones.

¿Qué es Subversion? 

Subversion es un sistema de control de versiones (SCV), (CVS en inglés). Un sistema de control de versiones permite a muchos desarrolladores tomar, editar y colocar código en los mismo archivos de manera ordenada y sin temor a sobreescribir y perder el trabajo de otros. Subversion fue creado con la idea de subsanar las deficiencias, limitaciones e incomodidades del viejo CVS y es por ello que muchas empresas y grupos de desarrolladores están haciendo la migración CVS->Subversion.

Subversion no sólo sirve para programadores, cualquier grupo de trabajo que comparte información puede (y debería) usarlo, un grupo de traductores o los contadores que están haciendo un reporte semestral se beneficiaran si usan Subversion. En verdad Subversion es excelente y sencillo de usar.

Un SCV tiene un repositorio en el servidor que contiene los archivos, los programadores toman (copian) los archivos del servidor a su equipo y los editan con el programa de su elección (Vim, Jedit.org, Emacs, Eclipse), a esta copia se le llama "Copia de trabajo". Es decir, hay un sólo repositorio en el server, pero muchas copias de trabajo, una por cada desarrollador que participe en el proyecto. Luego de que ha terminado de editar los archivos, el usuario hace un "commit" para sincronizar los archivos de su copia de trabajo con los archivos del repositorio del server.

Como usted ya estará pensando, esto crea un problema: si el usuario_1 toma una copia del repositorio y minutos después el usuario_2 toma otra copia, habrá dos copias y cualquier usuario puede sobreescribir el trabajo de otro miembro del equipo.

La mayoría de los SCV resuelven este problema bloqueando un archivo para que un usuario lo edite, lo salve y lo libere. Esta aproximación tiene muchas limitaciones pues si, por ejemplo, Martha toma el archivo "clientes.html", los otros miembros del equipo deben esperar a que el archivo esté disponible, si a Martha se le olvida liberarlo y sale de la oficina, hay que hablar con el administrador del sitio para liberar el documento, pero entonces Martha tendrá una copia "colgada", pues la editó pero no la sincronizó con el repositorio.

Subversion no tiene esta limitación pues aunque Martha tenga "clientes.html", Luis o Enrique pueden cada uno sacar su copia para trabajar en ella. Cuando los tres concluyen Subversion pone una bandera indicando que hace falta hacer un "merge" o conjunción de archivos. Subversion es lo suficientemente inteligente para no guardar todo el contenido de las versiones de "clientes.html" que Martha, Luis y Enrique producen: sólo guarda las líneas que cambiaron entre versiones y asi se ahorra mucho espacio en disco.

Sin embargo alguien debe abrir las tres versiones nuevas y hacer el "merge" para producir la nueva versión conjunta. Existen programas, como Trac, que facilitan el proceso pues resaltan las líneas que cambiaron entre versiones del mismo documento al tiempo que indican las diferentes fechas y horas de actualización de cada versión.

Instalación 

Por lo general Subversion se apoya en Apache2 y sus módulos Webdav, SVN y SSL para implementar la seguridad y la distribución de los archivos. Para instalar Subversion en Debian/Ubuntu:

$sudo apt-get install apache2 libapache2-svn libapache-mod-dav  openssl ssl-cert subversion subversion-tools

tanto el cliente como el server están en el paquete "subversion".

En el server

Para crear un repositorio nuevo:

$svnadmin create repos

En este caso estoy como usuario www-data en /var/morg/svn/public/, este directorio repos nunca debe ser editado a mano, siempre a través de los comandos de Subversion.

En Apache2 los módulos webdav y SSL deben estar instalados:

$sudo a2enmod ssl
$sudo a2enmod dav
$sudo a2enmod svn

El puerto 443 debe estar habilitado: 

$sudo echo "Listen 443" >> /etc/apache2/ports.conf

Generamos el certificado de seguridad: 

$sudo openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

Mi archivo de configuración de apache2 es así:

<virtualhost 122.148.107.10:443>
            ServerAdmin admin@mononeurona.org
            ServerName devel.mononeurona.org
            DocumentRoot /var/morg/svn/public/repos
           ServerAlias devel.mononeurona.org
           Options Indexes FollowSymLinks MultiViews
            SSLEngine On
            SSLCertificateFile /etc/apache2/ssl/apache.pem
            <location />
            Order allow,deny       
            Allow from all       
            DAV svn       
           #SVNParentPath /var/morg/svn/public  <-- esto no sirvio
            SVNPath /var/morg/svn/public/repos
            SVNAutoVersioning On
            Require valid-user       
            AuthType Basic       
            AuthName "MonoNeurona Subversion Repository"
        AuthUserFile /var/morg/svn/.dav_svn.passwd
        #grupos: karamelo, centauro de SVN
        AuthzSVNAccessFile /etc/apache2/svn/authz
        </location>   

      ErrorLog /var/morg/svn/log/error.log   
      # Possible values include: debug, info, notice, warn, error, crit,   
      # alert, emerg.   
        LogLevel warn   
        CustomLog /var/morg/svn/log/access.log combined               
</virtualhost>

Mi archivo /etc/apache2/svn/authz es así:

[groups]
owner    = aarkerio, karlos
karamelo = lukas, roberto, colotto
centauro = arturo, rasta, dereck
newbies  = anonymous

[/]
@owner    = rw
@karamelo = r
@newbies  = r

[centauro:/]
@owner    = rw
@centauro = rw
@newbies  = r

[karamelo:/]
@owner    = rw
@karamelo = rw
@newbies  = r

Para agregar usuarios que sean autentificados por Apache:

$sudo htpasswd  -c -m /var/morg/svn/.dav_svn.passwd aarkerio
$sudo htpasswd  -m /var/morg/svn/.dav_svn.passwd anonymous 

Al usuario anonymous, que sólo puede leer los repositorios pero no escribir en ellos, le ponemoos el password "1234". 

Nótese que, como indicamos, es Apache y no Subversion el encargado de la seguridad, es por ello que en Subversion no se colocan passwords: el archivo /etc/apache2/svn/authz no entra en acción sino hasta despúes que el usuario ha pasado la aduana de Apache.

Reiniciamos Apache2: 

$sudo /etc/init.d/apache2 restart

Trunk, branches, tags

Generalmente los repositorios de subversion tiene tres directorios:

repos/
  myproject/
     trunk/
     tags/
     branches/

a) Trunk - Este es el directorio principal de desarrollo, aquí es donde casi siempre trabajamos

b) Tags - Este es el directorio de las versiones de liberación y de las alpha/beta, es un directorio "muerto", cada vez que hay una nueva versión, se coloca en tags para el histórico y hacer el archivo project-version.tar.gz  y se sigue trabajando en trunk

c) branches -Este es el directorio de las pruebas, si alguien desea intentar algo nuevo o hacer un experimento, lo desarrolla aqui y si resulta y el grupo lo acepta, se mueve al trunk  

Para crear este árbol:

$svn --username aarkerio mkdir https://devel.mononeurona.org/karamelo -m "create project directory"
$svn mkdir https://devel.mononeurona.org/karamelo/trunk -m "create trunk directory"
$svn mkdir https://devel.mononeurona.org/karamelo/tags -m "create tags directory"
$svn mkdir https://devel.mononeurona.org/karamelo/branches -m "create branches directory"  

Ahora bien, supongamos que nuestro desarrollo está en /var/www/projects/karamelo, para colocar nuestro proyecto en el repositorio:

$svn  import /var/www/projects/karamelo https://devel.mononeurona.org/karamelo/trunk -m "initial import" 

Nos pedirá el password y el proyecto será puesto en el repositorio.

NOTA: Si tienes un archivo como my_database.php con el nombre de usuario y el password de la base de datos, muévelo a otro direcotiro ANTES de subir el proyecto, pues ese archivo no debe formar parte del proyecto.

En el cliente 

Bien, ya tenemos el código en nuestro repositorio, ahora supongamos que hay alguien que quiere ayudar en el proyecto, este usuario necesita tomar el código del proyecto para trabajar de manera local, esto lo hace con la opción checkout (co) del comando svn:

$svn --username anonymous co https://devel.mononeurona.org/karamelo/trunk

el usuario tendrá que teclear el password "1234". En el cliente todo lo relacionado con subversion se hace con el comando svn, para ver todas sus opciones:

aarkerio@prieta:~/karamelo$ svn help
uso: svn <subcomando> [opciones] [pars]
Cliente Subversion de línea de comandos, versión 1.4.2.
Tipee 'svn help <subcomando>' para ayuda sobre un subcomando específico.
Tipee 'svn --version' para ver la versión y los módulos de RA.
    o 'svn --version --quiet' para ver sólo el número de versión.

La mayoría de los subcomandos reciben parámetros de tipo archivo y/o
directorio.  Si no se proveen parámetros a estos comandos, por omisión
descenderán recursivamente desde el directorio actual (incluyéndolo).

Subcomandos disponibles:
   add
   blame (praise, annotate, ann)
   cat
   checkout (co)
   cleanup
   commit (ci)
   copy (cp)
   delete (del, remove, rm)
   diff (di)
   export
   help (?, h)
   import
   info
   list (ls)
   lock
   log
   merge
   mkdir
   move (mv, rename, ren)
   propdel (pdel, pd)
   propedit (pedit, pe)
   propget (pget, pg)
   proplist (plist, pl)
   propset (pset, ps)
   resolved
   revert
   status (stat, st)
   switch (sw)
   unlock
   update (up)

Subversion es una herramienta para control de versiones.
Para información adicional, vea http://subversion.tigris.org/
 

Por ejemplo, para ver el contenido de un archivo en el repositorio sin necesidad de descargarlo:

$svn cat  https://devel.mononeurona.org/karamelo/trunk/app/controllers/users_controller.php

Poco a poco conocerá todas las opciones de svn, que son pocas y muy sencillas de usar.

Bien el usuario ya posee el código, a esto como dijimos se le llama "copia de trabajo". Ahora él puede editar y trabajar con su copia, puede por un lado editar un archivo existente y por otro lado agregar un archivo al árbol. El comando st (status):

$svn st

Nos presenta los cambios que existen entre la copia de trabajo y el repositorio:

M      trunk/app/controllers/faqs_controller.php
?       trunk/app/views/faqs/show.thtml

En este caso el archivo faqs_controller.php es señalado con una M de modificado (modified) mientras el archivo show.thtml muestra un signo de interrogación (?) pues recién lo hemos creado con Jedit.org y Subversion no lo tiene en el repositorio, para agregar este archivo usamos la opción add.

$svn add  trunk/app/views/faqs/show.thtml
A         trunk/app/views/faqs/show.thtml

Subversion lo marca con una A de agregar (Add), es decir que lo hemos agregado a la copia local pero no en el repositorio del server. Para subir nuestros cambios al server usamos la opción commit (ci):

$svn ci -m "Mis primeros cambios del 13 Marzo del 2007" 
Enviando       trunk/app/controllers/faqs_controller.php
Añadiendo      trunk/app/views/faqs/show.thtml
Transmitiendo contenido de archivos ..
Commit de la revisión 2.

Pero como ya estará sospechando, el usuario anonymous no puede hacer commit pues sólo tiene permisos de lectura en /etc/apache2/svn/authz, para que un usuario pueda participar en un proyecto editando y agregando archivos tiene que ponerse en contacto con el líder de proyecto y pedir una cuenta con password de escritura.

Ignorar archivos

Hay algunos archivos que no queremos que se incorporen al repositorio, por ejemplo el archivo app/config/database.php es una archivo que necesito para desarrollar pero dado que tiene mi password no quiero que se agregue al repositorio. Para ignorar este archivo:

$svn propedit svn:ignore app/config/  <-- esto abrira un editor, aqui escribimos el archivo o archivos que queremos que sean ignorados de ese directorio
$svn update
$svn ci -m "Actualizo todo"

Otra manera de ignorar el archivo banner.png en un directorio:

$svn propset svn:ignore banner.png  trunk/app/webroot/img/imgusers/ 

Subversion y Trac

Por lo general Subversion se instala con Trac, este poderoso programa es una aplicación Web que ayuda a documentar y darle seguimiento a los bugs del programa que se está desarrollando. Podemos bajar Trac con subversion e instalarlo:

$svn co http://svn.edgewall.com/repos/trac/trunk Trac

$cd Trac

$./setup.py install

Trac también necesita su instancia de apache2:

<virtualhost 122.148.107.10:80>
            ServerAdmin admin@myserver.org
            ServerName trac.myserver.org
              DocumentRoot /var/morg/trac
              ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi
             
              <Directory /var/morg/trac>
                  AddDefaultCharset utf-8
                  Options Indexes FollowSymLinks MultiViews
                  AllowOverride All
                  Order allow,deny
                  Allow from all
                </Directory>
             
            ErrorLog /var/morg/chipotle/log/error.log   
            # Possible values include: debug, info, notice, warn, error, crit,   
            # alert, emerg.
            #HostNameLookups on
            #UseCanonicalName on
            ErrorDocument 404 http://www.myserver.org/perdido.php  
            LogLevel warn   
            CustomLog /var/morg/chipotle/log/access.log combined       
</virtualhost>

 

SVN tagging 

Ejemplo de como usar el directorio tags para liberar una nueva versión, además de respaldar el desarrollo:

1) Copy: 

$svn copy https://devel.mononeurona.org/karamelo/trunk https://devel.mononeurona.org/karamelo/tags/alpha-release-0.1 -m "Tagging the 0.1 alpha release of the 'Karamelo' project."

2) Export: 

$svn export https://devel.mononeurona.org/karamelo/tags/alpha-release-0.1/ /tmp/alpha-release-0.1

3) Compress: 

tar cfz /var/morg/ftp/pub/karamelo/karamelo-alpha-0.1.tar.gz   /tmp/alpha-release-0.1/ 

4) Clean: 

$rm -Rf /tmp/alpha-release-0.1

5) Backup your repository:

$svnadmin dump /var/morg/svn/public/repos/ | gzip -9 > svn-dump-karamelo-until-R47.gz

 

Hasta aquí estos apuntes sobre Subversion. 

 

Ficha del autor:

manuel_ARRROBA_mononeurona.org
Manuel Montoya estudió neuropsicología en la facultad y en el Instituto de Biomédicas de la UNAM. Trabajó en Compaq de México como diseñador de software, tiene diez años de experiencia en Java, PHP y SQL. Le interesan muchas cosas y neciamente le da por escribir sobre todas ellas. Actualmente trabaja en Chipotle Software, desarrollando Karamelo, una herramienta de e-Learning. Jedit.org y WindowMaker son su editor y escritorio favoritos.
aarkerio
The most effective way to restrict democracy is to transfer decision making from the public arena to unaccountable institutions. Chomsky.
Ver todos los articulos de aarkerio

Última actualización: 2007-04-29 10:57:00-05

Printable version

on 23/7/07 claudio wrote:
hola:

sabes tengo un problemita con la autorizacion, te cuento

tengo instalado subversion en un windows xp con apache 2

la autentificacion me funciona pero cuando le agrego la parte de la autorizacion no me funciona

<Location /repos>
DAV svn
SVNPath d:/repostesis/tesis


# only authenticated users may access the repository
Require valid-user

# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile C:\AppServ\Apache2\bin\passwd

# our access control policy
AuthzSVNAccessFile C:\AppServ\Apache2\bin\svnaccessfile.txt

</Location>

el archivo svnaccessfile.txt lo tengo de esta forma, probe de la forma q tu lo explicas pero no me funciono

[d:/repostesistesis/tesis/trunk]


o yo estoy creando mal este archivo, ayuda pliss

mi correo es claudioferr@gmail.com

gracias

claudio = rw
on 23/7/07 aarkerio wrote:
Hace años que no uso Windows, usa un sistema operativo serio ¿puedes intentarlo en ubuntu?

Add comment:



Captcha




Que estas haciendo?
teoshoteosho está:
Preparandome para el viaje a Puerto Vallarta... que triste...
1 hour, 15 minutes ago

scarecrowscarecrow está:
Du hast?
5 hours, 18 minutes ago

der_teufelder_teufel está:
Ich habe einen Kater, aber nicht so schlecht...
12 hours, 52 minutes ago

rnstuxrnstux está:
Y yo un Abrazo.
1 day, 12 hours ago

saidjosesaidjose está:
Dandole su habrazote a mi santa madre que me soporta
1 day, 14 hours ago

dsquiddsquid está:
esperando a que este el pozole
1 day, 16 hours ago

Que estuvimos haciendo >>
Chipotle Software

En tu equipo tienes:
Sólo Windows
Windows y Linux
Sólo Linux
Linux y un BSD
Solaris, linux y BSD
Sólo MacacOS
Rapiditas
Problemas de Lenguaje en niños
10410 lecturas
Sexualidad infantil y juvenil
9166 lecturas
Anticoncepción de Emergencia
7840 lecturas
Rompiendo cualquier clave WEP en unos pocos minutos
6917 lecturas
Sinapsis y exocitosis
6227 lecturas
Mi primer CakePHP, mmmmm cakeee
5260 lecturas
Evolución filética en las hepáticas
4697 lecturas
BASH y Primeros Comandos
4012 lecturas
CakePHP II Active Record
3742 lecturas
Cómo convertirse en hacker
3619 lecturas
Add to Technorati Favorites

ir arriba
La mayoría de los hombres persiguen el placer con tal apresuramiento, que en su prisa, lo pasan de largo. S. Kierkegaard

The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework XHTML GNU Hacker Chipotle Software

Too Cool for Internet Explorer