Responsive image

Que es Git y Github

Git es un sistema de control de versiones distribuido, diseñado y desarrollado inicialmente por Linus Torvalds en el 2005 cuando BitKeeper, el sistema de control de versiones que utilizaban para el desarrollo de Linux, cambiara su licencia y no permitiera su uso libre. En este post vamos a explicar qué es Git y cómo se relaciona con Github.

Git, y en general un sistema de control de versiones, tiene dos objetivos principales:

  1. Guardar el historial de cambios sobre el código de un proyecto.
  2. Permitir a varias personas contribuir simultáneamente sobre un mismo proyecto.

Para guardar el historial de cambios podríamos crear una nueva carpeta en nuestro computador y copiar todo el proyecto cada vez que quisiéramos hacer un cambio. Eso no es muy diferente a lo que hace Git por debajo cada vez que se hace un commit.


¿Qué es un commit?

Un commit es una fotografía (snapshot) de tu proyecto en un momento determinado. Un commit tiene una fecha y hora, un mensaje que describe los cambios que se hicieron desde el último commit, y un autor.

Git es una aplicación de consola con varios subcomandos que nos permiten, entre otras cosas, hacer commits, ver los cambios a los que no les hemos hecho commit, listar los commits, y ver la diferencia entre commits.


¿Cómo utilizar Git?

El flujo más simple de trabajo con Git es el siguiente:

1. Inicializa el repositorio (esto va a crear una carpeta oculta .git dentro del proyecto): $ git init

2. Trabaja en el código: crea, modifica y elimina archivos.

3. Selecciona los cambios que vas a incluir en el siguiente commit: $ git add index.html /s $ git add style.css

Puedes incluir todos los cambios con el siguiente comando: $ git add -A

4. Haz commit: $ git commit -m "El mensaje del commit"

5. Repite los pasos 2, 3, y 4.


¿Cada cuánto hacer commit?

Puedes hacer commit tan seguido como quieras. No hay una regla de oro. Mi sugerencia es agrupar un número de cambios que puedas describir en una línea y que tengan sentido en el historial del código. Puede ser un único cambio en un archivo, o múltiples cambios en varios archivos.


¿Cómo escribir un mensaje de commit?

La primera línea debe tener 50 caracteres, o menos, y es obligatoria. La pregunta que debería contestar la primera línea es: ¿qué hace este commit? Ejemplos de respuestas: "Cambia el tamaño de la fuente a #666 " o "Crea el modelo User ".

Opcionalmente, después de la primera línea, va una línea en blanco y más detalles de los cambios que incluye el commit: efectos secundarios, explicación de por qué se está haciendo el cambio, etc.


Github

Los pasos que describimos anteriormente almacenan el historial del código localmente en la carpeta oculta .git dentro de la raiz de tu proyecto (repositorio local). Si pierdes tu computador, pierdes tu código y su historial.

Podrías hacerle backup, o sincronizarlo en Dropbox (o algún servicio similar), pero si quieres que varias personas trabajen sobre el mismo proyecto, eso no va a funcionar.

Github nos brinda la posibilidad de crear un repositorio remoto (una réplica de nuestro repositorio local) en el que varios desarrolladores pueden colaborar, con herramientas que facilitan esa colaboración. Github es gratis para proyectos Open Source, pero si quieres tener repositorios privados, debes pagar una mensualidad (los planes empiezan en 7 dólares al mes).

El primer paso para trabajar con Github es registrarte, crear un repositorio y seguir las instrucciones que aparecen en la pantalla. Puedes empezar con un nuevo repositorio, o subir un repositorio local.

Recuerda que al hacer commit en tu repositorio local, esos cambios no se ven reflejados automáticamente en el repositorio remoto. Debes hacer git push para subir tus commits locales al repositorio remoto y git pull para traer los commits que otros han subido a tu repositorio local.

Por ejemplo, para actualizar tu repositorio local con los cambios que han hecho otros desarrolladores en el repositorio remoto puedes ejecutar el siguiente comando:

$ git pull

Por otro lado, para subir los commits locales que aún no existen en el repositorio remoto puedes ejecutar un comando similar al siguiente (los parámetros pueden variar según el repositorio y la rama que quieras subir):

$ git push origin master

Flujos de trabajo

Una ventaja/desventaja de Git es que es muy flexible y no hay una única forma de usarlo. En la sección ¿Cómo utilizar Git? describimos el flujo de trabajo más simple, pero no necesariamente el más recomendado. La razón es que Git es muy estricto en el orden de los commits y ese flujo de trabajo puede crear conflictos si varios están trabajando sobre el mismo proyecto (al hacer push).

Para eso existen las ramas (branches).


¿Qué es un branch?

Las ramas (branches) en Git son una poderosa herramienta que les permite a los miembros de un equipo trabajar en paralelo sobre un mismo proyecto y hacer experimientos que pueden eventualmente integrarse a la rama principal (master).


¿Como utilizar las Ramas?

Para hacer uso de una de las Ramas de tu proyecto, primero estas Ramas deben de haber sido creadas, por ejemplo vamos a crear 1 rama llamada testing que será para que el encargado de hacer pruebas en nuestro proyecto lo use, para crear esta Rama ejecutamos el siguiente comando en tu consola de comandos Git Bash

git branch testing

Como mencionamos arriba Git por defecto crea una Rama llamada master al ejecutar el comando git init, entonces ahora tenemos 2 Ramas, la Rama master y la otra testing entonces ambas Ramas estarían apuntando al primer historial de cambios del proyecto

Ya creamos la Rama testing, pero aún no estamos trabajando dentro de la Rama testing, si no en la Rama master, para cambiar a una Rama en este caso a la Rama testing, ejecuta el siguiente comando en tu consola de comandos Git Bash

git checkout testing

Con esto ya podrás trabajar sobre la Rama testing sin afectar la Rama master que es en donde se encuentra los archivos originales y no se podrán borrar o dañar.


¿Como funciona las Ramas o Branches?

En la actualidad las Ramas son usadas con el repositorio Github que es en donde se almacenan los archivos de un determinado proyecto, estos pueden guardarse de manera Pública o Privada, Github almacena un historial de cambios que se lleven a cabo en el proyecto.

Al cambiar de una Rama a otra, esta se selecciona mediante un apuntador llamado HEAD indicando así que estamos dentro de la determinada Rama a la cual cambiamos o accedimos, por ejemplo en el siguiente caso nos encontramos dentro de la Rama testing y master al mismo tiempo


Comandos esenciales para trabajar con Ramas en Git

Existen varios comandos para realizar una determinada tarea, entre los más importantes tenemos

git branch

Con este comando podemos ver en que Rama nos encontramos actualmente.

git show-branch

Nos muestra un resumen de todas las ramas que hay en un proyecto junto con sus últimas modificaciones o commits.

git merge testing -m “Mensaje o Descripción”

Con este comando puedes fusionar 2 ramas, por ejemplo la Rama ‘master’ y ‘testing’, este comando lo debes de ejecutar dentro de la Rama que quieres fusionar, por ejemplo nos pasamos a la Rama master y recién ejecutamos el comando.


Lista de comandos para Github / Git que deberías conocer
  • Muestra la guía de Ayuda de Git: git help -g
  • Establecer un email: git config --global user.email sam@google.com
  • Crear un nuevo repertorio GIT: git init
  • Agregar archivos al index: git add
  • Revisar repertorios o crear una copia local:
    git clone alex@93.188.160.58:/path/to/repository
    git clone /path/to/repository
  • Cambiar a la cabecera: git commit –m “Message to go with the commit here”
  • Lista de los archivos que se han cambiado: git status
  • Envía los cambios que se han hecho en la rama principal: git push origin master
  • Crear ramas o cambiar entre ellas: command git checkout -b <'banch-name'>
  • Para cambiar de una rama a otra solo usa: git checkout <'branch-name'>
  • Conectar a un repositorio remoto: git remote -v
  • Listar, crear o borrar ramas: git branch
  • Para borrar la rama: git branch -d <'branch-name'>
  • Fusionar todos los cambios: git pull
  • Fusionar una rama con otra rama: git merge <'branch-name'>
  • Ver conflictos con el archivo base: git diff --base <'file-name'>
  • Muestra una lista de commits: git log