Configurando GIT en Ubuntu Server

Configurando GIT en Ubuntu Server
by Janeth Kent Date: 11-04-2013


GIT es un software de control de versiones diseñado por Linus Torvalds, pero ¿Qué hace diferente a GIT de otros sistemas similares?

GIT es un sistema distribuido. Esto significa que existen repositorios en cada uno de los usuarios (desarrolladores). Personalmente, considero que eso hace que sea mucho más fácil su trabajo, debido a que se pueden hacer muchos commits locales (agrupar cambios y guardarlos) antes de enviar los cambios al servidor de desarrollo o de producción (push). Esto es genial dado que mis cambios solo afectan a mi repositorio local.

Si el cambio que se desea hacer, es lo suficientemente importante, se puede crear un nuevo branch (rama donde puedo hacer cambios mayores). Esto no pasaba con los sistemas centralizados en los cuales el repositorio estaba en un solo lugar (servidor) y por lo tanto, cuando hacías un commit tenías que cerciorarte de que los nuevos cambios no "rompieran" los de otros.

Ahora que ya sabemos qué es GIT vamos a implementarlo. Primero que todo es necesario entender cómo trabaja GIT y saber cómo es la distribución. Como se puede ver en la imagen de abajo, GIT aísla todos los repositorios de tal manera que cada uno pueda trabajar de forma independiente. Además tenemos que contar con un repositorio central, el cual tendrá todos los cambios realizados. Por supuesto, cada desarrollador podría trabajar en una rama (branch). Usualmente, el servidor de producción tiene su propia rama así como el de desarrollo.

Configuración de un repositorio central (servidor)

Vamos a configurar un repositorio central y dos repositorios locales para los
desarrolladores que trabajen en él.

 

Instalar GIT

[email protected]:~# sudo apt-get install git

Configuración de usuarios

[email protected]:~# git config --global user.name "Argos"

[email protected]:~# git config --global user.email [email protected]

Instalación de openssh (necesario para transferir datos mediante el protocolo SSH)

[email protected]:~# apt-get install openssh-server

Creación del usuario "git" (propietario del repositorio)

[email protected]:~# adduser git

Configuramos el servidor para autenticarnos mediante llaves públicas en vez de hacerlo con contraseñas.

Abrimos el archivo "sshd_config"

  [email protected]:~# nano /etc/ssh/sshd_config

Agregamos las siguientes líneas:

  PubkeyAuthentication yes

  AuthorizedKeysFile .ssh/authorized_keys

Ahora, creamos las llaves públicas:

Cambiamos al usuario "git" que creamos anteriormente

  [email protected]:~# su git

Nos movemos al "home" del usuario

  [email protected]:/home/argos$ cd ~

Creamos la carpeta oculta "ssh" para almacenar las llaves públicas

  [email protected]:~$ mkdir .ssh

Creamos el archivo "authorized_keys":

  [email protected]:~$ touch .ssh/authorized_keys

Creamos una carpeta para guardar las llaves públicas que nos envíen, así tendremos un mejor control de quienes se están comunicando con nuestro servidor.

[email protected]:~$ mkdir desarrolladores

Finalmente, crearemos un directorio que almacenará nuestro repositorio:

[email protected]:~$ mkdir dev

[email protected]:~$ cd dev

A continuación, inicializamos nuestro primer proyecto, al que llamaremos "cronos"

[email protected]:~/dev$ mkdir cronos.git

[email protected]:~/dev/cronos.git$ cd cronos.git

[email protected]:~/dev/cronos.git$ git --bare init

Hemos inicializado un repositorio vacío que se utlizará como repositorio central. Aquí
encontrarán todos los commit que vayan realizando al proyecto, sin embargo este
repositorio no se usa para desarrollar.

 

Configuración de los repositorios locales

Las siguientes instrucciones deberán seguirse en el ordenador de cada uno de los desarrolladores

El primer paso, será instalar y configurar GIT.

  [email protected]:~# apt-get install git

  [email protected]:~# git config --global user.name "Jose"

  [email protected]:~# git config --global user.email [email protected]

A continuación, generamos la llave pública y la enviamos al servidor:

  [email protected]:~# ssh-keygen -t rsa

  Nos pide una frase clave para usar la llave, esta tiene que ser mayor a 4 dígitos. Luego,

  enviamos la llave pública a la carpeta desarrolladores en nuestro servidor.

  [email protected]:~# scp /root/.ssh/id_rsa.pub [email protected]:desarrolladores/jose_rsa.pub

A continuación, en el servidor, agregaremos la llave enviada a authorized_keys:

[email protected]:~$ cat desarrolladores/jose_rsa.pub >> .ssh/authorized_keys

Nuevamente, en el ordenador del desarrollador, crearemos un directorio para el proyecto:

    [email protected]:~# mkdir cronos

    [email protected]:~# cd cronos/

    Ahora agregaremos un archivo como prueba

    root@jose:~/cronos# echo "hola HD :P " >> README

Inicializamos GIT

[email protected]:~/cronos# git init

Agregar todos los archivos que se desea enviar al servidor También se puede enviar archivo por archivo o por tipo de archivos.

[email protected]:~/cronos# git add .

Enviamos nuestro primer commit

[email protected]:~/cronos# git commit -m "Prueba del primer commit"

Agregamos la ruta del repositorio central

[email protected]:~/cronos# git remote add origin [email protected]:~/dev/cronos.git

Enviamos los cambios al repositorio central

[email protected]:~/cronos# git push origin master

Le pedirá que ingrese la frase con la que creo la clave pública

Para que otros desarrolladores puedan recuperar los cambios enviados, se utiliza el comando "pull" (en vez de push):

[email protected]:~/cronos# git pull origin master

Para visualizar el historial de cambios se puede utilizar una GUI como GitWeb o sino, por línea de comandos mediante git log:

[email protected]:~/cronos# git log --stat
    

Escrito por: Indira Burga (Ingeniera de Sistemas) en http://www.hdmagazine.org (Hackers & Developers Magazine Nº 5)

https://twitter.com/indirabm

http://about.me/indirabm

 
by Janeth Kent Date: 11-04-2013 visitas : 7964  
 
Janeth Kent

Janeth Kent

Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito vídeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT.