viernes, 30 de agosto de 2013

Crear Servidor Git con ssh y Editar documentos/código en equipo

Instalar y configurar servidor Git con SSH en Ubuntu

Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de código fuente. Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.
-- Wikipedia:Git --
 

-En el servidor-

# Instalación de Git.
sudo apt-get install git
git config --global user.name "Nombre Mio"
git config --global user.email mi@correo.com

# Instalamos openssh
sudo apt-get install openssh-server

# Creamos un usuario "usuariogit".
sudo adduser usuariogit

# Configuramos el servidor para que acepte llaves públicas. 
# Abrimos el archivo "sshd_config":
sudo nano /etc/ssh/sshd_config

# Agregamos llaves públicas
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# Ingresamos con el usuario "usuariogit" y nos movemos al "home" del usuario:
su usuariogit
cd ~

# Creamos la carpeta oculta "ssh":
mkdir .ssh

# Creamos el archivo "authorized_keys":
touch .ssh/authorized_keys

# Creamos una carpeta para guardar las llaves publicas que nos envíen.
mkdir clientes

 

-En el cliente

# Instalación de Git.
sudo apt-get install git
git config --global user.name "dansnati"
git config --global user.name dansanti@correo.com

# Generamos llave pública y la enviamos al servidor.
ssh-keygen -t rsa
scp /home/dansanti/.ssh/id_rsa.pub usuariogit@192.168.1.1:clientes/dansanti_rsa.pub
 
Y así con todos los otros clientes. 

 

-En el servidor-

# Agregamos las llaves públicas recibidas a "authorized_keys":
cat clientes/dansanti_rsa.pub >> .ssh/authorized_keys 

# Terminamos con la configuración inicial vamos a los proyectos.
mkdir proyectos

# Ahora vamos a crear un proyecto de prueba.
mkdir proyectos/testing.git
cd proyectos/testing.git/

# Por convención los proyectos terminan en .git "nombre_proyecto.git" .
git --bare init 
# Crea un proyecto vacío.
# Creo la carpeta del proyecto y agrego un archivo "README".
mkdir testing
cd testing/
echo "Inicio del proyecto." >> README

# Inicio el proyecto git, agrego los archivos, primer "commit", agrego remoto y mando al servidor.
git init
git add .
git commit -m "Primer commit"
git remote add origin usuariogit@192.168.1.1:~/proyectos/testing.git
git push origin master
 
# Actualizamos el proyecto y agregamos ultimo cambio en la prueba.
git pull origin master
echo "Ultimo cambio." >> README 
git commit -am "ultimo cambio"
git push

 

 -En el cliente-


# Bajamos el proyecto, agregamos un cambio y mandamos de vuelta.
git clone usuariogit@192.168.1.1:proyectos/testing.git

# Ejemplo de uso
cd testing/
echo "Agregamos un cambio." >> README
git commit -am "agregando un cambio"
git push
O pueden usar la interfaz gráfica más sencilla y humana smartgit





Y así podríamos continuar hasta que nos cansemos. Podríamos agregar mas clientes, mas proyectos, tenemos nuestra red con un servidor git. Cada nuevo proyecto alguien tiene que entrar al servidor con el usuario usuariogit y crear un proyecto git --bare.
También se podría limitar al usuariogit a temas relacionas con el mismo git, pero eso en otro momento.

6 comentarios:

  1. Hola, soy novato con ésto y tengo una duda. He hecho todos los pasos y bien. Pero una vez que envío el cambio con el cliente, el servidor cómo comprueba si ha recibido algo? Supongo que tendré que llamarle con ssh o tengo que añdirle en git remote -v? Un saludo

    ResponderEliminar
    Respuestas
    1. el cliente debe hacer un git pull haciendo eso cada cierto tiempo lo mantiene actualizado, igualmente antes de que elcliente haga un push , es recomendable (algunas veces obligatorio) hacer pull

      Eliminar
    2. Cuando pones en una parte:
      # Agregamos llaves públicas
      PubkeyAuthentication yes
      AuthorizedKeysFile .ssh/authorized_keys

      Esto lo tengo que agregar al final del documento que se abre?

      Eliminar
    3. Puede ser al final, pero debes asegurar de que no está descomentado dentro del archivo, algunas veces está así :

      #PubkeyAuthentication yes
      #AuthorizedKeysFile .ssh/authorized_keys


      ahí debes quitar solamente los #

      Eliminar
  2. Haciendo pruebas encontré la solución. El servidor tiene un repositorio vacío, y como tal no me deja hacer pull. En cuanto hice un clon del repo del servidor me permitió hacer un pull. Gracias de todas maneras por contestar, un saludo.

    ResponderEliminar