Gestión de proyectos software con Git y Github

Publicado el 13 junio 2016 por José María Acuña Morgado @jmacuna73
Desde su nacimiento en 2005, Git ha evolucionado y madurado para ser fácil de usar, es tremendamente rápido, completamente distribuido, muy eficiente con grandes proyectos como el núcleo de Linux (manejo eficiente de velocidad y tamaño de los datos) y tiene un increíble sistema de ramificación (branching) para desarrollo no lineal (miles de ramas paralelas).

GIT

GIT es un gestor de proyectos software desarrollado por Linus Torwalds para Linux y diseñado para desarrollo distribuido.
Cada desarrollador trabaja de forma independiente en su propio repositorio y sincroniza el repositorio con otro cuando lo necesita.
Uno de los repositorios puede utilizarse como repositorio de referencia.
Tutorial Web y eBook: http://git-scm.com/book/es

Proyecto, directorio y versión


El directorio del proyecto
  • Un proyecto se suele gestionar en un directorio (o carpeta): el directorio contiene todos los ficheros del proyecto.
  • Explorador de ficheros: muestra el contenido de un directorio gráficamente.
    Hacer clic sobre un objetos gráfico ejecuta un comando predefinido.
  • Terminal de comandos: ejecuta comandos en directorio de trabajo.
    El directorio de trabajo asociado es la base de las rutas (paths) relativas y los objetos se identifican con rutas (paths) absolutas o relativas.
Historia de un proyecto
  • Historia de un proyecto: es la historia de cambios en el directorio del proyecto.
  • Versión (Commit): punto de la historia del proyecto que puede ser restaurado (reconstruido).
  • Se debe consolidar versión en los puntos del desarrollo que deseemos poder volver atrás en el futuro.
  • Versiones frecuentes facilitan el mantenimiento y la legibilidad de un programa.
Árbol de versiones
  • La rama principal del proyecto se denomina master: es la historia de cambios en el directorio del proyecto.
    Una rama suele realizar un desarrollo separado.
  • Las ramas se suelen integrar en master, una vez acabadas.
Repositorio y Versión
  • Un repositorio git es un "directorio donde gestionar versiones".
    Se puede guardar o restaurar versiones. Las versiones se guardan en el directorio oculto .git
  • Versión (commit): directorio (proyecto) congelado en un momento determinado, incluyendo todos sus ficheros y subdirectorios.
Identificador de versión (SHA1)
  • Cada versión generada por GIT se identifica con un número aleatorio único (clave SHA1).
    Ejemplo: 973751d21c4a71f13a2e729ccf77f3a960885682.
  • GIT permite equipos de desarrollo distribuidos: los repositorios se pueden clonar sin problemas (ninguna versión en ningún otro repositorio utilizará el mismo identificador).
Colaboración y Firma
  • GIT esta pensado para trabajar en grupo: toda operación va firmada por su autor.
    Al configurar GIT se da el nombre y email del autor.
  • Un usuario puede copiar o clonar otro repositorio y continuar el desarrollo por su cuenta sobre la copia.
  • Dos repositorios pueden volver a sincronizarse.

Configurar GIT


# El comando "git config" permite manejar opciones de configuración.
# Las opciones configuradas pueden afectar a distintos ámbitos (proyectos):
# - Para todos los proyectos en el sistema.
# Usar opción --system. La configuración se guarda en /etc/gitconfig
# - Para todos los proyectos del usuario.
# Usar opción --global. La configuración se guarda en ~/.gitconfig
# - Sólo para el proyecto actual.
# Sin opción. La configuración se guarda en .git/config
# Consultar todas las opciones existentes: git help config
# Para firmar correctamente contribuciones y versiones debemos configurar:
$ git config --global user.name "Pedro Ramirez"
$ git config --global user.email pramirez@dit.upm.es
# Consultar el valor de todas las opciones configuradas:
$ git config --list
user.name=Pedro Ramirez
user.email=pramirez@dit.upm.es
color.ui=true
# Consultar el valor de una opción:
$ git config user.name
Pedro Ramirez

Ayuda


# Ayuda en línea de comandos:
$ git help # Muestra lista con los comandos existentes
$ git help comando # Ayuda sobre comando especificado
$git help add # Ayuda sobre el comando add
$ git add --help # Equivalente a anterior
$ man git-add # Equivalente a anterior
# Manual de referencia, chuletas, videos, otros enlaces:
http://git-scm.com/doc
http://ndpsoftware.com/git-cheatsheet.html
https://na1.salesforce.com/help/doc/en/salesforce_git_developer_cheatsheet.pdf

GITHUB

GITHUB es el portal de repositorios GIT: https://github.com
Ofrece un enfoque social y colaborativo: red social para compartir proyectos software.
Los repositorios públicos son gratis, los privados de pago: cuenta con más de 20M (Linux, Eclipse, jQuery, RoR, etc)
Gestión de organizaciones y proyectos software:
  • Soporta equipos de desarrollo distribuidos, abiertos o privados.
  • Uso y acceso muy sencillo a versiones, tareas, bugs, ...
  • Herramientas para desktop (MAC y Windows)
  • Incluye muy buenos tutoriales.

GITHUB: registro y ayuda


# Lo primero es crear una cuenta y una vez creada, debemos seguir sus instrucciones para:
# 1) Configurar y conectar con GITHUB nuestro GIT local:
https://help.github.com/articles/set-up-git/
# 2) Instrucciones para crear y clonar repositorios:
https://help.github.com/articles/create-a-repo
# 3) Instrucciones para colaborar en proyectos software distribuidos:
https://help.github.com/articles/be-social/

Subir un repositorio local a GITHUB


# Para subir un repositorio local a GITHUB debemos:
# 1) Crear un repositorio vacío en GITHUB con New Repository
# 2) Configurar repo. remoto origin con repositorio vacío
$ git remote add origin https://github.com/pepe/proy1
# 3) Hacer push de rama master local a origin
$ git push -u origin master # -u "tracking reference"

Fork: Copiar un proyecto en GITHUB


# Fork permite copiar un repositorio (proyecto) en nuestra cuenta en GITHUB
#
# -> Una vez copiado (clonado) tenemos acceso a él y podemos evolucionarlo

Contribuir a un proyecto GITHUB


# La forma habitual de contribuir a un proyecto en GITHUB es seguir estos 4 pasos:
# 1) Crear una copia del repositorio original en GITHUB con "Fork" en la cuenta propia
# 2) Clonar la rama creada en nuestra cuenta en nuestro ordenador local
p1> git clone https://github.com/pepe/proy1
# 3) Modificar el proyecto local, realizar commit y "push" a nuestra copia en GITHUB
p1> ...........
p1> git add ...
p1> git commit -m '.........'
p1> git push origin master
# 4) Hacer "Pull Request" desde nuestra cuenta en GITHUB pidiendo al administrador del
# repositorio original que introduzca nuestros cambios

GITHUB App for MAC & for Windows


GITHUB App es una herramienta gráfica muy eficaz para gestionar proyectos git localmente en el PC. Solo está soportada para MAC y para Windows.
  • Permite ver y gestionar el directorio de trabajo del proyecto y los cambios realizados,
  • Ver las versiones de un proyecto (historia) y los cambios realizados en cada versión.
  • Ver y gestionar las ramas de un proyecto y su sincronización con repositorios remotos.
Descargar (e instalar) GITHUB para MAC: https://mac.github.com
Descargar (e instalar) GITHUB para Windows: https://windows.github.com
Extracto del curso "Desarrollo de servicios en la nube con HTML5, Javascript y node.js" impartido a través de la plataforma online MiríadaX.
El curso incluye también el el despliegue de servicios de servidor en la nube e introduce técnicas básicas de ingeniería software.
Jose Maria Acuña Morgado - Desarrollador Web