Ferramentas de Colaboración e Elaboración de Proxectos
O Problema do Control de Versións.
A maior parte do software se desenvolve por parte dunha equipa de programadores, non por un so autor. Moitas veces os programadores poden estar a traballar ó mesmo tempo sobre os mesmos ficheiros e precisan doutros ficheiros dos que están facendo uso outros programadores.
Ademáis é necesario levar un rexistro das modificacións, a razón pola que se fixeron esas modificacións, das distintas versións dos programas, etc.
Para levar a cabo todas estas importantes tarefas existen potentes ferramentas das que imos destacar CVS e Subversion.
O Problema da Colaboración en Proxectos.
Cando varias persoas traballan no mesmo proxecto resulta dunha gran utilidade dispoñer de ferramentas que permitan a comunicación entre os membros da equipa dun xeito o máis inmediato posible, ademáis de dispoñer inmediatamente do traballo desenvolto polo resto do grupo.
Hoxe en día co auxe de Internet están dispoñibles diversas ferramentas con distintos servicios como Wikis, listas de correo e noticias ou foros de discusión.
Ferramentas para Control de Versións e Colaboración.
CVS
O CVS ou Sistema de Control de Versións é un sistema que manten un rexistro de todos os cambios feitos nun proxecto de xeito que en calquera momento se pode obter unha copia do proxecto no estado no que se atopaba nun instante determiñado (recuperar versións vellas). Tamén permite que varias persoas modifiquen o proxecto o mesmo tempo, informando o sistema si se produce algún problema de consistencia que teña que ser solucionado a mán. Polo tanto é un sistema de colaboración e control de versións.
O xeito de traballo con CVS consiste nun servidor que almacena o proxecto e dos clientes, que obteñen copias locais dese proxecto para traballar. O inicio da sesión de traballo se debe obter a última versión do proxecto e cando se remata (ou cando se desexe) enviar mediante o cliente os ficheiros modificados ó servidor. O servidor informará de calqueira problema debido ós cambios feitos polos demáis colaboradores.
As operacións típicas con CVS son as seguintes:
- Creación do almacén para os proxectos
<c>
cvs -d /camiño/nome do almacen
</c>
- Comenzar a traballar no proxecto dende un cliente
<c>
export CVSROOT=:pserver:usuario@direccion da maquina:/camiño/proxecto cvs login
</c>
- Enviar arquivos a un novo proxecto
<c>
cvs import -m "comentario" [proxecto] cvs start
</c>
- Descarga inicial do proxecto
<c>
cvs checkout [proxecto]
</c>
- Baixar a última versión do proxecto, ou unha versión concreta ou o estado nunha data concreta
<c>
cvs update cvs update -r [versión] cvs update -D [data]
</c>
- Enviar modificacións
<c>
cvs commit -m "comentario" [ficheiros]
</c>
Subversion
Subversion é a versión moderna de CVS e pretende sustituílo. En lugar de almacenar os ficheiros directamente no almacén emprégase unha base de datos relacional (Berkeley DB), o que proporciona funcions como transaccións e axuda a solucionar problemas como o acceso á vez por varios usuarios. Subversión é máis rápida que CVS e traballa so cos cambios efectuados ós ficheiros non cos ficheiros completos (como CVS). Subversion permite almacenar todo tipo de ficheiros e pode servirse cun servidor web.
Instalación de Subversion
Subversion (igual que CVS) é un sistema cliente/servidor. No lado servidor un programa (svnserve) encárgase de atender as peticións do cliente (svn). Existen distintos xeitos de implementar o servidor:
- Como un servidor executándose permanentemente ou lanzado dende xinetd/inetd.
- Nese caso é necesario lanzar o servidor de xeito que esté a espera de conexións. Calquera cliente que se conecte terá os privilexios de execución cos que esté a traballar o servidor, polo que se recomenda utilizar un usuario especial e facer o almacén propiedade dese usuario. Para contactar co servidor empregarase no cliente o protocolo svn (svn://...), e o comando para lanzar o servidor debe ser parecido ó seguinte:
<c> svnserve -d -r /camiño/Almacén
</c>
- Mediante túnel ssh
- Neste caso e necesario que os usuarios que acceden mediante ssh teñan permisos sobre o almacén. Para facer esto recoméndase crear un grupo ó que pertenzcan todos os usuarios da equipa de desenvolvemento, e facer que o almacen sexa membro dese grupo. Tamén é necesario asegurar que a creación de novos arquivos ten permisos de escritura para o grupo mediante un umask 0022 na execución de svnserve, svnadmin e svnlook.
- Mediante un servidor Web
- O servidor web precisa dun módulo WebDav para servir peticións de subversión, e será executado por un usuario fixo dun xeito similar o primeiro caso. De modo que o almacén debe ter permisos para ese usuario.
Uso básico de Subversion
O ciclo de traballo con subversion comenza coa creación do sitio que servirá para almacenar os distintos proxectos (chamado de aquí en diante repositorio mediante a ferramenta svnadmin. Para crear o sitio será necesario facer no servidor:
svnadmin create /camiño/o/repositorio
Os permisos que teña a carpeta restrinxirán o acceso ós distintos usuarios do cliente de subversion. Si se ten permisos sobre a carpeta, pódese controlar o acceso dos usuarios mediante o ficheiro conf/svnserve.conf.
Unha vez creado o repositorio, os distintos usuarios poden iniciar novos proxectos, extraer unha copia dun proxecto para comenzar a traballar con el, etc.
Outra tarefa a realizar no servidor e a realización de copias de seguridade:
svnadmin dump /camiño/o/repositorio | gzip -9 > copia_repositorio.gz
que se restaurarían co seguinte comando:
gunzip -c copia_repositorio.gz | svnadmin load /camiño/o/repositorio
A operación típica sobre un repositorio é a seguinte:
- Un usuario inicia un proxecto cos arquivos contidos nunha carpeta propia.
svn import carpeta svn+ssh://servidor/camiño/o/repositorio
- Outro usuario (ou o mesmo) crea unha copia de traballo
svn checkout svn+ssh://servidor/camiño/o/repositorio/proxecto
Unha vez creada a copia de traballo, a secuencia a seguir sería a seguinte:
- O usuario obtén a última versión
svn update
E posible que o usuario durante o seu traballo teña a necesidade de engadir novos arquivos o proxecto:
svn add arquivo (ou carpeta)
Ou de eliminar un arquivo do proxecto
svn del arquivo (ou carpeta)
O usuario tamén pode mover ou copiar arquivos dun proxecto a outro:
svn copy orixe destiño svn move orixe destiño
onde orixe e destiño son direccións dentro do repositorio (no noso caso svn+ssh://...)
- O usuario fai o seu traballo e o rematar envía os cambios do proxecto
svn commit
Antes de enviar os cambios é posible examinar todo o traballo feito sobre a copia orixinal:
svn status
Que indicará o tipo de cambios feitos cun código alfabético, sendo os máis importantes:
- A item
- O ficheiro, directorio ou enlace vaise engadir ó repositorio.
- C item
- O ficheiro ten un conflicto. A versión do servidor cambiou respecto á nosa copia de traballo e é necesario resolver o conflicto elexindo que copia vai quedar almacenada.
- D item
- O ficheiro, directorio ou enlace vai ser eliminado do repositorio.
- M item
- Modificouse o contido do ficheiro.
- R item
- O ficheiro, directorio ou enlace vai ser reemplazado por outro obxecto co mesmo nome sen variar a revisión.
- ? item
- O ficheiro, directorio ou enlace non forma parte do control de versións.
- ! item
- Falta o ficheiro, directorio ou enlace.
- ~ item
- O tipo de elemento almacenado no repositorio non coincide coa copia local.
- I item
- O ficheiro, directorio ou enlace non se atopa baixo control de versións e subversion o vai ignorar.
Tamén é posible desfacer cambios e retornar o estado anterior:
svn revert ficheiro
ou obter o parche diff para facer os cambios actuais:
svn diff > patch
- Por último, unha vez rematado o proxecto, o usuario pode obter unha copia de distribución:
svn export svn+ssh://servidor/camiño/o/repositorio/proxecto
Solución de Conflictos
Cando se envían os cambios o servidor é posible que existan conflictos, xa que outros usuarios poden ter modificado o mesmo arquivo que nos. Para solucionar este problema, subversion indicará cun indicador G cando e capaz de absorver todos os cambios dun xeito automático, e cun indicador C, cando non é posible.
No caso en que non é posible a mezcla (Conflicto), se impedirá o envío dos cambios mentras non solucionemos o problema. Para axudarnos se xenerarán no lugar de traballo tres arquivos:
- arquivo.mine - E o arquivo que se modificou localmente.
- arquivo.rNºrevisión - Se xerará un arquivo coa revisión anterior os cambios feitos no repositorio, e outro coa versión que se atopa actualmente no repositorio.
Para axudar a resolver o conflicto, o arquivo terá insertadas unha serie de marcas indicando as modificacións que se atopan en conflicto. Para resolvelas moitas veces será necesario falar coas outras partes. Unha vez resolto o conflicto se indicará co comando:
svn resolved ficheiro
sendo posible enviar posteriormente os cambios cun commit.