Instalar y configurar servidor Git con SSH en Ubuntu 12
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 --
Ok, vamos a emular un grupo de trabajo y ver como es esto de "git". Bien entonces llamare a unos amigos para que me den una mano.
A Yagami Light lo mandamos a administrar el servidor:
Ubuntu Server 12.04 Usuario: kira IP: 192.168.1.99
Por otro lado Monkey D. Luffy y Yo tomamos dos clientes:
Ubuntu Desktop 12.04 Usuario: luffy & alanEntonces el proceso fue así:
-En el servidor-
# Instalación de Git. kira@userver:~$ sudo apt-get install git kira@userver:~$ git config --global user.name "Yagami Light" kira@userver:~$ git config --global user.email kira@death-note.com # Instalamos openssh kira@userver:~$ sudo apt-get install openssh-server # Creamos un usuario "git". kira@userver:~$ sudo adduser git # Configuramos el servidor para que acepte llaves públicas. # Abrimos el archivo "sshd_config": kira@userver:~$ sudo nano /etc/ssh/sshd_config # Agregamos llaves públicas PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # Ingresamos con el usuario "git" y nos movemos al "home" del usuario: kira@userver:~$ su git git@userver:/home/kira$ cd ~ # Creamos la carpeta oculta "ssh": git@userver:~$ mkdir .ssh # Creamos el archivo "authorized_keys": git@userver:~$ touch .ssh/authorized_keys # Creamos una carpeta para guardar las llaves publicas que nos envíen. git@userver:~$ mkdir clientes
-En el cliente Monkey D. Luffy-
# Instalación de Git. luffy@one-piece:~$ sudo apt-get install git luffy@one-piece:~$ git config --global user.name "Monkey D. Luffy" luffy@one-piece:~$ git config --global user.name luffy@one-piece.com # Generamos llave pública y la enviamos al servidor. luffy@one-piece:~$ ssh-keygen -t rsa luffy@one-piece:~$ scp /home/luffy/.ssh/id_rsa.pub git@192.168.1.99:clientes/luffy_rsa.pub
-En el cliente Alan Tello Oyola (yo)-
# Instalación de Git. alan@ax2to:~$ sudo apt-get install git alan@ax2to:~$ git config --global user.name "Alan Tello Oyola" alan@ax2to:~$ git config --global user.name alan.tello@gmail.com #Generamos llave pública y la enviamos al servidor. alan@ax2to:~$ ssh-keygen -t rsa alan@ax2to:~$ scp /home/alan/.ssh/id_rsa.pub git@192.168.1.99:clientes/alan_rsa.pub
-En el servidor-
# Agregamos las llaves públicas recibidas a "authorized_keys": git@userver:~$ cat clientes/luffy_rsa.pub >> .ssh/authorized_keys git@userver:~$ cat clientes/alan_rsa.pub >> .ssh/authorized_keys # Terminamos con la configuración inicial vamos a los proyectos. git@userver:~$ mkdir proyectos # Ahora vamos a crear un proyecto de prueba. git@userver:~$ mkdir proyectos/testing.git git@userver:~$ cd proyectos/testing.git/ # Por convención los proyectos terminan en .git "nombre_proyecto.git" . git@userver:~/proyectos/testing.git$ git --bare init # Crea un proyecto vacío.
-En el cliente Monkey D. Luffy-
# Creo la carpeta del proyecto y agrego un archivo "README". luffy@one-piece:~$ mkdir testing luffy@one-piece:~$ cd testing/ luffy@one-piece:~/testing$ echo "Inicio del proyecto." >> README # Inicio el proyecto git, agrego los archivos, primer "commit", agrego remoto y mando al servidor. luffy@one-piece:~/testing$ git init luffy@one-piece:~/testing$ git add . luffy@one-piece:~/testing$ git commit -m "Primer commit" luffy@one-piece:~/testing$ git remote add origin git@192.168.1.99:~/proyectos/testing.git luffy@one-piece:~/testing$ git push origin master
-En el cliente Alan Tello Oyola (yo)-
# Bajamos el proyecto, agregamos un cambio y mandamos de vuelta. alan@ax2to:~$ git clone git@192.168.1.99:proyectos/testing.git alan@ax2to:~$ cd testing/ alan@ax2to:~/testing$ echo "Agregamos un cambio." >> README alan@ax2to:~/testing$ git commit -am "agregando un cambio" alan@ax2to:~/testing$ git push
-En el cliente Monkey D. Luffy-
# Actualizamos el proyecto y agregamos ultimo cambio en la prueba. luffy@one-piece:~/testing$ git pull origin master luffy@one-piece:~/testing$ echo "Ultimo cambio." >> README luffy@one-piece:~/testing$ git commit -am "ultimo cambio" luffy@one-piece:~/testing$ git pushY 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 git y crear un proyecto git --bare.
También se podría limitar al usuario git a temas relacionas con el mismo git, pero eso en otro momento.
Nota: El archivo README al final quedo así:
Inicio del proyecto. Agregamos un cambio. Ultimo cambio.Actualizacion 1: Habian algunos errores que se originaron cuando puse el script de formato, ya los he corregido.
Mucha sgracias, al fin un tutorial que me sirvio, y que explica de una manera simple y didactica el uso e instalacion de git...
ResponderBorrarGracias!
Saludos
Gracias por todo. Claro y al grano.
ResponderBorrarSi lo completas con un gitweb para poder explorar los repositorios similar a github, pues de escándalo.
Si, me ha quedado pendiente lo de gitweb, aunque es bastante sencillo de instalar.
BorrarEsta excelente. Yo para poder instalarlo y usarlo desde una red local tuve q hacer todo esto. Pero leyendo como de 4 o 5 tutoriales. Esta muy completo. Exitos!
ResponderBorrarFantástico!!! Una muy buena referencia para aclararme bien montando el servidor y sin falta de gitosis en mi Arch! Justo lo que estaba buscando ;)
ResponderBorrarhola, ubuntu 12.04 no me reconoce el comando ssh-keygen -t rsascp tengo instalaso el ssh
ResponderBorrarusa
Borrarssh-keygen -t rsa
como que se traslapo el scp de abajo =)
Saludos!!
Si es verdad XD
BorrarMe ha gustado mucho, pero me he leído algo com que tengo mi proyecto y puedo hacer los cambios sin estar conectados y luego mandarlos de vuelta como explicabas.¿Pudieras ejemplificarlo?
ResponderBorrarSin estar conectado puedes trabajar normalmente, almacenar los commit en local, cuando quieres mandar tus cambios, primero actualizas (pull) tu proyecto y luego haces el envio (push).
Borrar