Instalación y configuración del Servidor y Cliente Git bajo ssh

2009 Marzo 23
etiquetas: , ,
by sergio hinojosa avila

Git es uno de los mejores versionadores distribuidos, si usas github pero quieres tener tu propio repositorio en tu casa o trabajo entonces esta es una simple solucion, que no te toma mas de unos minutos, esta misma configuracion la he probado en dreamhost y funciona de la misma manera, de echo deberia funcionar en cualquier host que tengas. Si quieres ademas poder publicarlo mediante http, entonces una muy buena opcion gitweb.  Gitosis es tambien otra opcion que tienes, que es muy parecido pero para algun proyecto simple creo que esto es suficiente.

1. Configuración del Servidor git

 

El único requisito es tener instalado git:

 

$ sudo apt-get install git-core

 

nota: El servidor esta configurado e instalado en django-server que tiene la IP 192.168.0.139, el usuario es django-server con password *****.

 

2. Configuración del Cliente git

 

Primero debemos generar el conjunto de llaves RSA:

 

$ ssh-keygen -t rsa

 

Luego debemos registrar nuestra llave publica en el servidor, dentro de las llaves autorizadas de ssh, como sigue:

 

$  cat .ssh/id_rsa.pub | ssh django-server@192.168.0.139 ‘cat >> .ssh/authorized_keys’

 

En caso de no tener git instalarlo:

 

$ sudo apt-get install git-core

 

Crear el archivo initrepo con el siguiente contenido:

 

$ vim initrepo

 

DOMAIN=django-server@192.168.0.139

ssh $DOMAIN ‘mkdir -p ~/git/’$1′.git && cd ~/git/’$1′.git && git –bare init’

mkdir $1

cd $1

git init

git remote add origin ssh://$DOMAIN/~/git/$1.git

touch .gitignore

git add .

git commit -m ‘Created new repo’

git push origin master

echo “

[branch \"master\"]

  remote = origin

  merge = refs/heads/master” >>.git/config

echo “Your new git repo ‘$1′ is ready and initialized at $DOMAIN/~/git/$1.git”

 

Asignarle los permisos:

 

$ sudo chmod a+x initrepo

 

Para iniciar un repositorio nuevo en la maquina remota solo es necesario ejecutar initrepo y pasarle como parámetro el nombre del repositorio:

 

$ ./initrepo test01

 

Inmediatamente veras una salida como esta:

 

Reinitialized existing Git repository in /home/django-server/git/test01.git/

mkdir: cannot create directory `test01′: File exists

Initialized empty Git repository in .git/

Created initial commit cccf28a: Created new repo

 0 files changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 .gitignore

Counting objects: 3, done.

Writing objects: 100% (3/3), 219 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To ssh://django-server@192.168.0.139/~/git/test01.git

 * [new branch]      master -> master

Your new git repo ‘test01′ is ready and initialized at django-server@192.168.0.139/~/git/test01.git

 

Veras que en tu propia maquina tendrás la carpeta test01, ingresa y ya puedes empezar a hacer cambios y propagarlos en el servidor haciendo git push.

 

3. Obtener una copia de un repositorio remoto git y trabajar sobre el mismo

 

Para poder obtener una copia de un repositorio remoto primero deberá registrar su llave publica en el servidor remoto.

 

git clone ssh://django-server@192.168.0.139/~/git/test01.git

 

Luego puedes hacer cambios y replicarlos en el repositorio remoto con git push.

 

Referencias:

 

http://autopragmatic.com/2008/01/26/hosting-a-git-repository-on-dreamhost/

http://casperfabricius.com/site/2008/09/21/keeping-git-repositories-on-dreamhost-using-ssh/

http://madduck.net/blog/2007.07.11:publishing-git-repositories/

http://batterypowered.wordpress.com/2008/07/04/deploying-a-git-repository-server-in-ubuntu/

http://www.urbanpuddle.com/articles/2008/07/11/installing-git-on-a-server-ubuntu-or-debian

http://mechanicalrobotfish.com/posts/119-installing-git-server-using-gitosis

Una respuesta dejar un →
  1. 2009 Marzo 25

    Saludos Sergio, muy interesante tu artículo, actualmente estoy trabajando en un proyecto que accedemos varios usuarios al mismo repositorio por ssh y quiero hacerte unas preguntas.

    Como puedo ver los branches en el servidor???
    Como puedo ver la ultima version comitada en el servidor??

    Se que exite el gitweb que es un comando que te presenta el repositorio via http, pero quisiera poder responder las preguntas que te hice con algun comando.
    Saludos

Escribe un comentario

Nota: Puede usar XHTML básico en sus comentarios. Su dirección de correo electrónico nunca será publicada.

Subscripción al comentario vía RSS