Configuración de un entorno de trabajo con GIT

Cuando emprendemos el desarrollo de un sistema o de un sitio web, en el que participan dos o más personas, tenemos que organizarnos muy bien para evitar destruir con nuestros cambios el trabajo previo de los compañeros de proyecto. A pesar del nivel de sincronía y organización que se pueda alcanzar, frecuentemente surgen conflictos o dudas al trabajar en aspectos del proyecto muy cercanos entre si, por ejemplo cuando un desarrollador requiere modificar un archivo de código sobre el que viene trabajando un colega. La situación se complica cuando los involucrados no comparten un mismo entorno físico, por lo que el chat, correo o teléfono no mejoran el asunto. Es por ello que en estas circunstancias hay que recurrir a lo que se denomina un control de versiones, de los que existen varios, pero uno destaca especialmente por su origen: el GIT.

¿Qué es el GIT?

Git (pronunciado "guit") 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 éstas 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, 2017)

Manos a la obra

A continuación describiremos los pasos básicos para la configuración de un entorno de desarrollo conformado por al menos dos desarrolladores regido por el sistema de control de versiones GIT. Sin embargo esta metodología también sera aplicable para un programador solitario, ya que un control de versiones entre sus bondades ofrece un historial de versiones, por lo que se puede regresar a estados previos del desarrollo, en el caso de que los cambios efectuados no nos satisfagan.

En el servidor

Instalamos git. En el caso de Debian o Ubuntu

TERMINAL
  1. apt-get install git

En el caso de Fedora

TERMINAL
  1. yum install git-core

Crearemos el usuario git para que el repositorio principal se ubique en su directorio de trabajo, sin embargo se puede utilizar un usuario existente o crear uno distinto.

TERMINAL
  1. useradd git
  2. passwd git

Ahora creamos y configuramos el directorio donde se alojara el repositorio

TERMINAL
  1. cd ~
  2. mkdir repositorio.git
  3. cd repositorio.git
  4. git init --bare --shared
  5. mv hooks/post-update.sample hooks/post-update

Podemos usar el comportamiento por defecto del servicio git al momento de procesar la información proveniente de los clientes, o cambiarla por un esquema básico que se detalla a continuación:

Editamos el archivo hooks/post-update

TERMINAL
  1. nano hooks/post-update

Y realizamos el siguiente cambio:

ARCHIVO hooks/post-update
  1. # El parámetro $1 del script es el nombre del branch actualizado
  2. # Comparamos con master para actualizar el entorno de producción
  3. # y con test para actualizar el entorno de pruebas
  4. case " $1 " in
  5. *'refs/heads/master'*)
  6. echo "Pulling producción"
  7. unset GIT_DIR
  8. cd /var/www/repositorio || exit
  9. git pull origin master
  10. ;;
  11. esac
  12. case " $1 " in
  13. *'refs/heads/test'*)
  14. echo "Pulling pre-producción"
  15. unset GIT_DIR
  16. cd /var/www/repositorio-test || exit
  17. git pull origin test
  18. ;;
  19. esac
  20. exec git-update-server-info

En el cliente del desarrollador líder

Procedemos a configurar el repositorio del desarrollador líder, aquel que tiene la última palabra cuando surge un conflicto con los cambios que el equipo de desarrollo actualiza sobre el repositorio principal

TERMINAL
  1. apt-get install git
  2. cd ~
  3. mkdir repositorio.git
  4. cd repositorio.git
  5. git init
  6. git remote add origin usuario@servidor-ip:/home/usuario/repositorio.git

Ahora creamos o copiamos un archivo cualquiera en esta carpeta, por ejemplo:

TERMINAL
  1. touch prueba

Procedemos a hacer la sincronización inicial

TERMINAL
  1. git add *
  2. git commit -m “Subida inicial”
  3. git push origin master

En el cliente de los otros desarrolladores

Esta sera la configuración tipo a seguir por el resto del equipo de desarrollo

TERMINAL
  1. apt-get install git
  2. cd ~
  3. mkdir repositorio.git
  4. cd repositorio.git
  5. git init
  6. git remote add origin usuario@servidor-ip:/home/usuario/repositorio.git
  7. git pull origin master

En el servidor Web

Hasta ahora hemos configurado lo relativo a los repositorios, los pasos que se listan a continuación están enfocados hacia la construcción de un entorno adecuado para el desarrollo de un proyecto Web. El objetivo es que al momento de actualizar cambios hacia el repositorio central, estos también se reflejen en el servidor Web del ambiente de desarrollo de nuestro proyecto.

TERMINAL
  1. sudo usermod -G git www-data
  2. cd /var/www
  3. sudo mkdir repositorio
  4. sudo chown -R git:git repositorio
  5. sudo chmod 775 repositorio
  6. cd repositorio
  7. git init

En caso de tener un repositorio de pruebas, dentro del ambiente de desarrollo, se siguen estos pasos adicionales:

TERMINAL
  1. sudo usermod -G git www-data
  2. cd /var/www
  3. sudo mkdir repositorio-test
  4. sudo chown -R git:git repositorio-test
  5. sudo chmod 775 repositorio-test
  6. cd repositorio-test
  7. git init


REFERENCIA

Wikipedia. (18 de abril de 2017). Git. Recuperado de: https://es.wikipedia.org/wiki/Git



Linux: Comandos usados en la manipulación de archivos y directorios (Parte 2)


Continuación de la recopilación de los principales comandos de Linux para el manejo de archivos y directorios:

TERMINAL
  1. cp arch_1 arch_2

Copia el archivo 'arch_1' colocándole el nombre 'arch_2'

TERMINAL
  1. cp dir_1/* .

Copia todos los archivos del directorio 'dir_1' dentro del directorio de trabajo actual. No incluye en la operación los subdirectorios

TERMINAL
  1. cp -r dir_1/* .

Copia todos los archivos del directorio 'dir_1' dentro del directorio de trabajo actual. Incluye en la operación los subdirectorios

TERMINAL
  1. cp -a dir_1/dir_2 .

Copia el directorio 'dir_1' dentro del directorio actual de trabajo

TERMINAL
  1. ln -s arch_1 link_1

Crea un enlace simbólico, con el nombre 'link_1', del archivo 'arch_1'

TERMINAL
  1. ln arch_1 link_1

Crea un enlace físico, con el nombre 'link_1', del archivo 'arch_1'

TERMINAL
  1. touch -t 0882250990 arch_1

Modifica el tiempo real (tiempo de creación) de un archivo o directorio. Si no existe el archivo 'arch_1' crea uno vació con ese nombre

TERMINAL
  1. file arch_1

Muestra por pantalla el contenido del archivo 'arch_1'

TERMINAL
  1. diff arch_1 arch_2

Muestra las diferencias entre los archivos 'arch_1' y 'arch_2'

TERMINAL
  1. tar -cvf tar_1.tar dir_1

Empaqueta el directorio 'dir_1' en el archivo 'tar_1.tar'

TERMINAL
  1. tar -xvf tar_1.tar

Desempaqueta el archivo 'mitar.tar'

TERMINAL
  1. whereis programa_1

Muestra la ubicación del programa_1

TERMINAL
  1. file arch_1

Describe el tipo del archivo 'arch_1', por ejemplo: imagen, de texto, etc.
Nota: file identifica el tipo de archivo aún si su extensión no es la correcta

TERMINAL
  1. whatis comando_1

Muestra la descripción de comando_1

TERMINAL
  1. wc -w arch_1

Cuenta las palabras en el archivo de texto 'arch_1'

TERMINAL
  1. wc -l arch_1

Cuenta las lineas en el archivo de texto 'arch_1'

TERMINAL
  1. wc -m arch_1

Cuenta los caracteres en el archivo de texto 'arch_1'

TERMINAL
  1. wc -c arch_1

Cuenta los bytes en el archivo de texto 'arch_1'

TERMINAL
  1. head arch_1

Muestra las primeras 10 líneas del archivo 'arch_1'

TERMINAL
  1. tail arch_1

Muestra las últimas 10 líneas del archivo 'arch_1'

 

Linux: Comandos usados en la manipulación de archivos y directorios (Parte 1)


A continuación les dejo una recopilación de los principales comandos de Linux para el manejo de archivos y directorios:

TERMINAL
  1. cd /home

Se posiciona en el directorio home

TERMINAL
  1. cd ..

Retrocede un nivel en el árbol de directorios

TERMINAL
  1. cd ../..

Retrocede 2 niveles en el árbol de directorios

TERMINAL
  1. cd

Se posiciona en el directorio raíz

TERMINAL
  1. cd –

Se posiciona en el directorio padre

TERMINAL
  1. pwd

Muestra la ruta del directorio de trabajo o actual

TERMINAL
  1. ls

Muestra los archivos del directorio de trabajo o actual

TERMINAL
  1. ls -a

Muestra los archivos ocultos en el directorio de trabajo o actual

TERMINAL
  1. ls -l

Muestra los detalles de archivos y directorios de la ruta actual

TERMINAL
  1. ls *[0-9]*

Muestra los archivos y directorios que contienen números, en la ruta actual

TERMINAL
  1. tree

Muestra los archivos y directorios en forma de árbol a partir de la ruta actual

TERMINAL
  1. mkdir dir_1

Crea un directorio con nombre ‘dir_1’

TERMINAL
  1. mkdir dir_1 dir_2

Crea dos directorios simultáneamente, con los nombres 'dir_1' y 'dir_2'

TERMINAL
  1. mkdir -p tmp/dir_1/dir_2

Crea un árbol de directorios, o una secuencia de directorios anidados

TERMINAL
  1. rm -f arch_1

Borra el archivo llamado ‘arch_1’

TERMINAL
  1. rmdir dir_1

Borra el directorio llamado ‘dir_1’

TERMINAL
  1. rm -rf dir_1

Elimina un directorio llamado ‘dir_1’ con su contenido

TERMINAL
  1. rm -rf dir_1 dir_2

Borra los directorios 'dir_1' y 'dir_2' junto con su contenido

TERMINAL
  1. mv dir_1 dir_nuevo

Renombra o mueve un archivo o directorio