Skip to content
Benjamín Domínguez edited this page Sep 2, 2020 · 2 revisions

Tema: Github y Gitflow

Versión: 1.0

Por Camila Chávez (cschavez@uc.cl) | Luciano Davico (lldavico@uc.cl)

Esta cápsula estará enfocada en enseñar comandos, conceptos y técnicas básicas de git y GitFlow, para que puedan aplicarlos en su proyecto semestral, pudiendo trabajar de manera más ordenada y provechosa. De esta manera, esta guía está diseñada para personas que tengan poca experiencia con git o Github y, así, puedan adquirir más conocimientos en buenas prácticas para desarrollar un software en equipo.

Crear un repositorio local

Si quieren comenzar un proyecto de software desde 0 y ya han programado algo de código o documentación, pueden iniciar un repositorio localmente y subir lo realizado a un repositorio remoto. Asimismo, pueden crear un nuevo repositorio vacío desde su perfil de Github. A continuación los pasos:

  1. En el directorio actual se inicializa un repositorio local en la rama master. Crea una carpeta llamada .git que nos indica que es un repositorio de git.
# Iniciar un repositorio local en el directorio actual
git init
  1. Agregar todos los archivos en el directorio actual, salvo aquellos que no estén listados en un .gitignore.
# Esto agrega todo lo que está en el directorio actual
git add .

# Alternativamente
git add --all

# Agregar un archivo específico
git add index.js
  1. Necesitamos un repositorio al cual enviar los archivos, por lo que utilizamos git remote. Este comando muestra una lista de los nombres de repositorios remotos que están asociados al repositorio local.
# Muestra la lista de nombres de repositorios remotos junto a su url.
git remote -v

# Permite asignar un repositorio remoto al repositorio local en el que estamos trabajando.
git remote add <nombre_remoto> <url>

# Ejemplo
git remote add origin https://github.com/user/example.git

# Para pushear/pullear o cualquier comando se debe hacer
git pull origin <nombre_rama>

Trabajar desde repositorio existente

Si se incorporarán a un proyecto que ya tiene parte del código realizado y subido en un repositorio en Github, no deben inicializar un nuevo repositorio en su computador, sino que pueden obtener todo el código de la rama principal del repositorio remoto mediante el siguiente comando:

git clone <url_repositorio>

Esto creará una carpeta en el directorio actual, con el nombre del repositorio remoto. En su interior estarán todos los documentos que estaban en la rama principal del repositorio remoto (usualmente la rama master).

GitFlow:

GitFlow es un modelo de branching o ramificación de flujos que ayuda a la gestión de repositorios en GitHub. Las ventajas de implementarlo es que permite que los equipos puedan trabajar de forma independiente, eliminando el riesgo de hacer commit sobre los cambios de otro integrante deshaciendo las funcionalidades o arruinando el código. Todo esto siempre se hace considerando un repositorio central al que se van integrando poco a poco las nuevas partes de la aplicación.

La forma en que funciona es por rama. Hay dos principales:

  • Rama master: contiene la versión final del proyecto. Hacer cambios directamente en el código en esta rama es una mala práctica. Lo que está aquí va directo a deploy.

  • Rama development: todas las funcionalidades que ya estén correctamente implementadas están en esta capa de desarrollo. Es donde se va uniendo todo y el resultado final contiene el código que conformará la siguiente nueva versión del proyecto. Una vez que en dev están implementadas todas las funcionalidades correctamente de una entrega, se sube a master.

  • Luego, están las ramas auxiliares que pueden nacer de la rama development o de otras ramas auxiliares. Estas ramas van surgiendo a medida que se van implementando nuevas funcionalidades en el proyecto. Es importante entender que la cantidad de estas no es igual a la cantidad de desarrolladores. Por ejemplo, si ustedes están empezando a formar el frontend de su aplicación puede haber una rama para crear la página de inicio, otra para el inicio de sesión, otra para implementar un mapa, etc, independientemente de quién trabaja en cada una.

¿Cómo implementamos esto?

Comandos importantes:

  • git branch: muestra la rama actual en la que te encuentras.
  • git branch -a new_branch: crea una nueva rama local llamada “new_branch” que es copia de la rama en que te encuentras.
  • git checkout -b new_branch: crea una nueva rama local llamada “new_branch” que es copia de la rama en que te encuentras y te mueve a ella.
  • git checkout name_branch: entra o te traslada a la rama “name_branch”.
  • git checkout --track origin/remote_branch: crea una nueva rama llamada remote_branch, pullea la rama ‘remote_branch’ del repositorio remoto en la rama remote_branch local y te traslada a esa rama.
  • git push --origin name_branch: sube la rama “name_branch” a tu repositorio remoto.

Paso a paso:

  1. Pararse en la rama master
git checkout master
  1. Crear una rama development/dev/develop
git branch -a dev o git checkout -b dev # esto creará una rama dev que será copia de master
  1. Subir la rama dev al repositorio remoto
git push --origin dev
  1. Crear subramas para el desarrollo que sean copia de dev
git branch -a subrama o git checkout -b subrama
  1. Subir la rama subrama al repositorio remoto
git push --origin subrama

Ahora, solo nos queda hacer merge de la subrama en la rama dev

Merge a dev

Luego que va terminando el trabajo en cada rama deben ir uniendo todo en dev. Se le dice merge el fusionar el contenido existente en una rama con el contenido en otra rama.

El merge se puede realizar directamente por consola, o bien, mediante las llamadas Pull Requests.

Para hacer merge por consola:

Estamos en una rama llamada branch-1:

git add --all
git commit -m "added new features"

Podemos hacer push de esta rama al repo remoto

git push origin branch-1

Vamos a la rama dev o cualquiera en la que queramos incorporar los cambios

git checkout dev

Mergeamos el contenido de branch-1 en dev

git merge branch-1

Pull Requests

Si bien esta puede parecer una alternativa menos rápida para incorporar cambios a la rama dev, recomendamos fuertemente realizar Pull Requests, por diferente razones:

  • Permite realizar una revisión de código para disminuir posibles errores o bugs.
  • Facilita un entendimiento conjunto del código para todos los desarrolladores del proyecto.
  • Se puede realizar desde una interfaz más amigable (sitio web de Github).
  • Permite detectar y resolver conflictos desde la interfaz de Github.
  • Buena práctica y muy utilizada en el mundo del desarrollo de software y aseguramiento de calidad de este (SQA).

Para explicar este proceso hicimos el siguiente video en donde se implementan los pasos de crear dev y una subrama además de hacer merge y pull request. Tienen que entrar con su mail UC en el siguiente link

VIM

Puede darse el caso que se les abra un editor de texto en la misma terminal en la que están haciendo uso de git. Este editor de texto se llama VIM y la documentación oficial la pueden encontrar aquí. Por lo general, este editor se abre cuando detecta que se realizará algún merge, un push o pull en el cual no se ha ingresado un mensaje en el commit, por lo que se pedirá que se ingrese un mensaje de commit mediante tal editor. Se deben realizar los siguientes pasos:

  1. Apretar ESC:

→ Con esto nos aseguramos de estar en el “menú” principal de comandos de VIM.

  1. Presionar tecla I (letra i mayúscula): → Ingresaremos al modo INSERTAR, en el cual ahora podemos ingresar un mensaje para el commit respectivo. → Descomentar alguna de las líneas que comienzan con # y escribir el mensaje de commit.

  2. Apretar ESC nuevamente:

→ Con esto volvemos al menú principal de VIM, una vez que ya hemos ingresado el texto.

  1. Escribir comando :wq

→ Finalmente, el comando :wq permitirá guardar el mensaje del commit ingresado y salir de VIM (write & quit). Con esto volveremos a la terminal.

Consideraciones

Si por algún motivo ingresamos erróneamente a VIM, solo se debe ingresar el comando :q y saldremos del editor.

Si queremos utilizar VIM para editar algún documento de nuestro repositorio, se debe utilizar el comando vim <nombre_archivo> y de esta forma realizar los pasos de insertar, guardar y salir indicados anteriormente.

Mucho éxito con sus proyectos y cualquier duda nos contactan para ayudarlos!

Links útiles

En los siguientes links pueden encontrar información sobre lo expuesto y más, como por ejemplo sobre cómo revertir uno o más commits que se hayan hecho, para volver a una versión anterior del proyecto.