De svn a git

De Wiki Asqueados
Saltar a: navegación, buscar

Proceso para tranformar un repositorio de svn (llamado 'jdr') en uno de git y compartirlo remotamente.


Crear repositorio a través de svn

  • Instalar git-svn.
  • Crear fichero authors.txt con una correspondencia entre usuarios svn y usuarios git:
inconexo=inconexo <inconexo@maquina.local>
  • Crear el repositorio con:

git svn clone --prefix=svn/ --stdlayout --authors-file=authors.txt http://localhost/svn/jdr -s git-jdr -T/

  • Actualizar el repositorio svn con los cambios que hagamos en git (si queremos por algún motivo seguir manteniéndolo actualizado):

git svn dcommit

Crear repositorios en el servidor

Necesitamos dos repositorios para el invento: uno contra el que hacemos el push, que no tendrá copia de trabajo, y otro que sí tenga copia de trabajo y tire del primero.

Repositorio sin copia de trabajo

  • Crear directorio jdr.git en el sevidor
  • Iniciar el repositorio sin copia de trabajo

user@server:jdr.git# git --bare init

  • Crear el destino remoto en el repositorio local:

user@local:git-jdr$ git remote add server.net user@server.net:jdr.git

  • Empujar el repositorio a la rama master del servidor

user@local:git-jdr$ git push server.net

Repositorio que sirve los datos

Todo esto ejecutar en el servidor remoto

  • Clonar el repositorio

git clone jdr.git jdr.localgit

  • Crear script de actualización

jdr.localgit/update.sh

#!/bin/bash

dir=`dirname "$0"`
old_GIT_DIR="$GIT_DIR"
unset GIT_DIR

cd "$dir"
git pull
if [ $? == 0 ]
then
        echo "Repositorio $dir actualizado con éxito"
else
        echo "ERROR: No se ha podido actualizar el repositorio $dir"
fi

GIT_DIR="$old_GIT_DIR"
  • Añadir el script al hook de post-receive

jdr.git/hooks/post-receive

#!/bin/bash
/<path>/jdr.localgit/update.sh
  • Enlazar los ficheros desde el directorio web deseado.

Así, cuando se empujen cambios al servidor, la copia se actualizará y serán directamente visibles en el servidor.