23 de Junio, 2010

Montando un repositorio remoto y privado con GIT

El código de esta bitácora lo gestiono con git, y por ahora no es público, así que me he montado un repositorio remoto para utilizar a modo de backup y para utilizar en los despliegues en producción (qué serio todo :D).

Lo malo de git es que muchas cosas son sencillas, pero no resulta tan obvio la primera vez (por cierto, Pro Git me parce un recurso indispensable).

En mi caso, desarrollador solitario en este proyecto, he decidido acceder al repositorio remoto vía SSH: seguro, limpio y fácil.

En el servidor, elegimos un directorio donde poner nuestros repositorios, por ejemplo $HOME/code, y creamos el que guardará el projecto:

[servidor]$ mkdir -p $HOME/code/proyecto.git

Lo de acabar el nombre del directorio en .git es una convención útil, sobretodo si usamos gitweb (incluido en el paquete de git) para tener una vista web de nuestros repositorios.

Inicializamos el directorio como un repositorio:

[servidor]$ cd $HOME/code/proyecto.git
[servidor]$ git --bare init
Initialized empty Git repository in /home/usuario/code/proyecto.git

Para terminar la configuración en el servidor, le daremos permisos al usuario que va acceder a los ficheros. En mi caso es el mismo usuario propietario el que accederá a ellos, así que no hay que hacer nada.

Ahora nos vamos a nuestra máquina de desarrollo, donde ya tenemos un repositorio local para nuestro proyecto, por ejemplo $HOME/src/blog.

Situándonos en el repositorio, vamos a indicar nuestro nuevo repositorio remoto, que llamaremos remoto:

[desarrollo]$ git remote add remoto ssh://usuario@servidor/home/usuario/code/proyecto.git

En este ejemplo:

  • remoto: es el nombre que le damos al repositorio.
  • usuario: el usuario en el servidor con el que accederemos con SSH.
  • servidor: la máquina remota donde hemos creado el repositorio remoto en los pasos anteriores.
  • /home/usuario/code/proyecto.git: la ruta al repositorio remoto dentro de la máquina remota.

Ahora solo nos queda enviar nuestros cambios al repositorio:

[desarrollo]$ git push remoto master
usuario@servidor's password: 
Counting objects: 142, done.
Compressing objects: 100% (137/137), done.
Writing objects: 100% (142/142), 36.61 KiB, done.
Total 142 (delta 65), reused 0 (delta 0)
To ssh://usuario@servidor/home/usuario/code/proyecto.git
 * [new branch]      master -> master

Por supuesto indicamos la contraseña del usuario remoto, y listo: nuestro repositorio remoto ya está sincronizado con nuestro repositorio local.

Parece que con git cada cual tiene su flujo de trabajo, que más o menos le funciona. Yo también tengo el mío ;).

En mi caso hago el desarrollo local, y cuando tengo algo probado que quiero pasar a producción, pongo un tag y hago un push de nuevo al servidor.

Una vez en el servidor, puedo generar un archivo para el nuevo tag con:

[servidor]$ git archive --remote /home/usuario/code/proyecto.git 0.01 > deploy.tar

En el ejemplo he pedido la versión con tag 0.01, y ya tengo un tarball listo para desplegar. Es cierto que también podría generar el paquete con el repositorio local, y enviarlo al servidor, y es lo que haría si no tuviera el repositorio remoto en la misma máquina en la que voy a desplegar el proyecto.

¿Fácil? Bueno, todo lo fácil que puede ser trabajar con git ;).

Anotación por Juan J. Martínez, clasificada en: git.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: