Categorías
Desarrollo

Cambiar de SVN a Git en sistema de versiones.

Que es SVN

Apache SUBVERSION(abreviado frecuentemente como SVN, por el comando svn) es una herramienta de control de versiones open source basada en un repositorio cuyo funcionamiento se asemeja enormemente al de un sistema de ficheros. Es un software libre bajo una licencia de tipo Apache/BSD.

Utiliza el concepto de revisión para guardar los cambios producidos en el repositorio. Entre dos revisiones sólo guarda el conjunto de modificaciones(delta), optimizando así al maximo el uso de espacio en disco. SVN permite al usuario crear, copiary borrar carpetas con la misma flexibilidad con la que lo haria si estuviese en su disco local. Dada su flexibilidad, es necesaria la aplicacion de buenas practicas para llevar a cabo una correcta gestion de las versiones del software generado.

Subversion puede acceder al repositorio a través de redes, lo que le permite ser usado por personas que se encuentran en distintas computadoras. A cierto nivel, la posibilidad de que varias personas puedan modificar y administrar el mismo conjunto de datos desde sus respectivas ubicaciones fomenta la colaboración. Se puede progresar más rápidamente sin un único conducto por el cual deban pasar todas las modificaciones. Y puesto que el trabajo se encuentra bajo el control de versiones, no hay razón para temer por que la calidad del mismo vaya a verse afectada –si se ha hecho un cambio incorrecto a los datos, simplemente deshaga ese cambio.

Ventajas y Desventajas de usar SVN

Ventajas

  • Se sigue la historia de los archivos y directorios a través de copias y renombrados.

  • Las modificaciones(incluyendo cambios a varios archivos) son atómicas[1].

  • La creacion de ramas y etiquetas es una operación más eficiente.

  • Se envían sólo las diferencias en ambas direcciones.

Desventajas

  • El manejo de cambio de nombres de archivos no es completo. Lo maneja como la suma de una operación de copia y una de borrado.

  • No resuelve el problema de aplicar repetidamente parches entre ramas, no facilita llevar la cuenta de quó cambios se han realizado. Esto se resuelve siendo cuidadoso con los mensajes.

Que es Git

Git es un software de control de versiones diseóado por Linus Torvalds, pensandoen la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Supropósito es llevar el registro de los cambios en archivos de computadora y coordinar el trabajo que varias personas realizan sobre archivos compartidos.

El mantenimiento del software Git estó actualmente siendo supervisado y mantenido por una comunidad de mas de 1,312(2019) programadores los cuales contribuyen al desarrollo constante de Git. En cuanto a derechos de autor Git es un software libre que se distribuye bajo los términos de la version 2 de la Licencia Pública General de GNU.

Ventajas y Desventajas

Ventajas

  • Fuerte apoyo al desarrollo no lineal, por ende rapidez en la gestión de ramas y mezclado de diferentes versiones. Git incluye heramientas específicas para navegar y visualizar un historial de desarrollo no lineal. Una presunción fundamental en Git, es que un cambio será fusionado mucho más frecuentemente de lo que se escribe originalmente, conforme se pasa entre varios programadores que lo revisan.

  • Gestión distribuida. Git le da a cada programador una copia local del historial de desarrollo entero, y los cambios se propagan entre los repositorios locales. Los cambios se importan como ramas adicionales y pueden ser fusionados en la misma manera que se hacen con la rama local.

  • Los repositorios de información pueden publicarse por HTTP, HTTPS, FTP, RSYNC o mediante un protocolo nativo, ya sea a través de una conexion TCP/IP simple o a traves de cifrado SSH.

  • Los repositorios Subversion y SVK se pueden usar directamente con ‘git-svn’.

  • Gestión eficiente de proyectos grandes, dada la rapidez de gestión de diferencias entre archivos, entre otras mejoras de optimización de velocidad de ejecución.

  • Todas las versiones previas a un cambio predeterminado, implican la notificaión de un cambio posterior en cualquiera de ellas a ese cambio(denominado autenticación criptogrófica de historial).

Desventajas

  • Dificultad de aprendizaje rapido y sencillo usando la documentación oficial, por la gran cantidad de comandos y funciones disponibles.

Usando Git como control de versiones

Requisitos

  • S.O. Windows, Linux o MacOS

  • Como es un software muy eficiente y de bajos recursos cualquier PC de hoy en

dia puede instalar Git de manera facil y rapida.

Requisitos Servidor Git

  • Só se desea hacerlo de forma manual sin utilizar un software intermedio se

puede utilizar el siguiente tutorial en donde explica paso a paso [como montar

Git en un servidor](https://Git-scm.com/book/es/v1/Git-en-un-servidor).

Migrar SVN a Git

Para migrar un repositorio de SVN a Git se puede hacer con un solo comando

$ git svn clone <svn repositorio URL>  <parameters>

Despues se debe reconfigurar los origenes del repositorio(la URL del la ubicacion en el servidor Git), asi agregando el origen del servidor Git y elimiando el origen del servidor SVN si asi se desea.

A partir de este punto ya se puede trabajar mediante Git en el repositorio usando todos loa agregados de Git y dejando de trabajar sobre SVN.

Migrar SVN a Git, Versión 2

Buscando en algunas web’s varios usuarios recomeindan los siguientes pasos para migra run repositorio de SVN a Git:


# Creamos el repositorio en el servidor remoto

$ git init --bare repos/{repo}.git #repo es el nombre del repositorio, se ejecuta en la raiz del servidor GIT

$ cd repos/{repo}.git/

$ echo  "http://example.com/proyecto.git"  > cloneurl

$ echo  "Una buena descripcion del proyecto"  > description

$ git config gitweb.owner 'UserOwner'

$ git config http.receivepack true

  

# En nuestra maquina local

# -------------------------------------

  

# Instalamos el paquete de ubuntu

$ sudo apt-get install git-svn

  

# Carpetas donde vamos a obtener el proyecto

$ mkdir migration

$ cd migration

  

# Inicializamos el repositorio git para svn (Sin los datos no necesarios de svn)

$ git svn init http://svn.example.com/myproject --no-metadata

  

# Creamos un archivo que relacione los usuarios de subversion con los de git

# Ejecutamos esto con cada usuario del repositorio

$ echo  "user = User Name <user.email@contoso.com>"  >> users.txt

  

# Le indicamos a git donde encontrar la relacion de usuarios

$ git config svn.authorsfile users.txt

  

# Obtenemos todas las revisiones de svn y las interpretamos para git (puede demorar mucho tiempo)

# Puede que se bloquee o se interrumpa porque falta algun usuario, al volver a ejecutar el comando el continua desde

# la ultima revision obtenida

$ git svn fetch

  

# Subimos un nivel

$ cd ..

  

# Clonamos el repositorio nuevamente para que sea totalmente git

$ git clone migration myproject

  

# Entramos al repositorio git

$ cd myproject

  

# Borramos la referencia local del origen del repositorio

$ git remote rm origin

  

# Agregamos la referencia remota del origen

$ git remote add origin http://example.com/proyecto.git

  

# Enviamos el repositorio al servidor remoto (puede demorar un poco)

$ git push origin master

  

# Verificamos que todo haya cargado correctamente

$ git log

  

# Borramos la carpeta de la migracion

$ cd ..

$ rm -rf migration

  

# Para terminar, damos gracias por ser tan inteligentes 🙂


Apendice

Definiciones

1.- Atómicidad: Es la propiedad que asegura que una operacion se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias. Se dice que una operacion es atómica cuando es imposible para otra parte de un sistema encontrar pasos intermedios. Si esta operación consiste en una serie de pasos, todos ellos ocurren o ninguno.

Diseña un sitio como este con WordPress.com
Comenzar