Actualmente existen varios servicios de hospedaje gratuito para repositorios git, el único requisito es que nuestros proyectos sean opensource. Pero si no queremos que algún proyecto sea público, ya sea porque X o Y razón, tendríamos que pagar una módica cantidad.
Aunque es un precio accesible, algunos si somos bien pobres codos y por otro lado, si tenemos otro lugar para hospedarlo nos podemos ahorrar esos loritos para otra ocasión.
Esta receta puede llevarse a cabo tanto local como remotamente, para comenzar necesitaremos únicamente de git y un servidor ssh, los cuales en debian y derivados se instalan de esta manera:
# apt-get install git-core openssh-server
Para crear los repositorios nos conectaremos al servidor remoto. En mi caso hice esto localmente y decidí agregar el usuario git, ya que en mi disco duro tengo una partición dedicada para /home.
$ ssh git@git.kelevra.org
Y ejecutamos los siguientes comandos:
$ mkdir test-project.git
$ cd test-project.git
$ git --bare init # inicializamos el repositorio remoto
Con eso ya tenemos nuestro repositorio funcionando, ahora vamos a commitear algunos archivos:
$ cd projects
$ mkdir test-project
$ cd test-project
$ git init # inicializamos el repositorio local
$ git remote add origin git@git.kelevra.org:test-project.git # agregamos el repositorio remoto
$ echo 'Hello World!' > README
$ git add README
$ git commit -m 'first push'
$ git push origin master
Si todo ha ido bien, veremos algo como:
git@git.kelevra.org's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 221 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@git.kelevra.org:test-project.git
* [new branch] master -> master
Nuestro repositorio está trabajabdo bien, el password obviamente es el que le hayamos designado al usuario que creamos.
¿Pero que pasa si otros van a colaborar en mi proyecto?
Tienes dos opciones: La número uno sería que les hagas saber el password de dicho usuario, pero estar escribiendolo cada vez que vayamos a pushear algo es molesto.
La número dos y la más recomendable: Usar SSH-KEYS.
A saber, existen dos tipos de llaves, DSA y RSA, sea cual sea nuestra elección, el procedimiento para crear un par de llaves es la siguiente:
$ ssh-keygen -t dsa # cambiar por rsa según nuestra elección
Generating public/private dsa key pair.
Enter file in which to save the key (/home/kelevra/.ssh/id_dsa): .ssh/git_dsa # no es obligatorio especificar ubicación
Enter passphrase (empty for no passphrase): # escribimos una clave para usar la llave
Enter same passphrase again: # y la escribimos de nuevo para confirmar
Your identification has been saved in .ssh/git_dsa.
Your public key has been saved in .ssh/git_dsa.pub.
Hemos generado una llave pública y una privada, la pública es la que copiaremos al servidor remoto:
$ scp .ssh/id_dsa.pub git@git.kelevra.org:.ssh/authorized_keys2
git@git.kelevra.org's password:
id_dsa.pub 100% 608 0.6KB/s 00:00
Ahora ya no nos pedirá el password del usuario cada vez que hagamos push o nos conectemos para crear un nuevo repositorio, en su lugar nos pedirá la clave que le asignamos a nuestro par de llaves. Pero aún tenemos que escribir un password, sin embargo podemos usar ssh-agent que recordará por determinado tiempo nuestras claves, para iniciar este agente basta con teclear en la terminal:
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-RwRst31999/agent.31999; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32000; export SSH_AGENT_PID;
echo Agent pid 32000;
Ya una vez corriendo el agente agregamos nuestra llave:
$ ssh-add .ssh/git_dsa
Enter passphrase for .ssh/git_dsa:
Identity added: .ssh/git_dsa (.ssh/git_dsa)
¡Y listo! Nos conectamos de nuevo vía ssh o hacemos otro push para comprobar que ya no nos pide el password del usuario y de la llave ssh. Y ahora si ya tenemos nuestro servidor de repositorios git bien sencishito y carismático