git y GitHub

Pablo Paccioretti

Verónica Andreo

Prep steps

Por defecto git está instalado en la mayoría de las PCs que tienen Mac o Linux. En Windows se puede instalar desde aquí

Quarto puede usarse con: VSCode, RStudio, Jupyter, Neovim, otros editores de texto

Outline

  • Qué es git
  • git workflow local
    • Iniciar un repositorio (repo)
    • Agregar/editar archivos y registrar cambios, commit
    • Ramas / Branches
  • Qué es GitHub
  • GitHub Workflow:
    • Proyecto personal
      • Crear repo
      • Push / Pull
    • Proyecto colaborativo
      • Fork / Clone
      • Pull request

Qué es git?

Es un programa de control de versiones por línea de comandos que permite:

  • Administrar archivos, carpetas
  • Realizar un seguimiento de los cambios a lo largo del tiempo
  • Volver a versiones anteriores

¿Qué es un repositorio?

  • repo = repositorio = repository
  • Es básicamente un directorio
  • Por lo general es utilizado para organizar un único proyecto
  • Los repos pueden contener otros directorios, archivos, imágenes, videos…

git Workflow local

  1. Iniciar un repositorio en una carpeta
git init
  1. Agregar/editar archivos
  2. Registrar cada cambio
git add .
  1. Registrar el cambio en el repositorio (commit)
git commit -m "Un mensaje descriptivo y corto"

graph TD
  A[Working] -->|add| B(Staging)
  B --> |commit| C(Repository)

Tips sobre git

Para utilizar git no es necesario internet. Es posible trabajar de manera local para llevar un control de versiones.

Cuándo se debería usar git?

Principalmente para trabajar/editar archivos de texto plano, por ejemplo: .py, .sh, .md, .qmd, .r, etc. No se recomienda para imágenes, películas, música o archivos como pdf, docx, etc.

Cómo deberían ser los mensajes de cada commit

Mediante una oración corta e informativa (\(\le 72\) caracteres), se debería describir y resumir los cambios que se realizaron.

Revisando los cambios

  • Cómo ver lo que se estuvo modificando?
git log
  • Cómo ver qué archivos se han modificado?
git status
  • Cómo ver qué se cambió de cada archivo?
git diff
git diff nombreArchivo.txt

Otros comandos útiles

Eliminar archivos del repo

git rm nombreArchivo.py

Cuidado!

Esto también elimina el archivo del repositorio.


Renombrar/mover archivos

git mv nombreArchivo.py OtroNombre.py

Trabajando con branches

  • Las ramas o branches permiten probar nuevos cambios (feature branch)
  • Si un cambio no funcionó, se puede eliminar la rama sin necesidad de deshacer cambios en la rama principal (main)
  • Si un cambio funcionó, se puede combinar (merge) a la rama principal
  • Siempre se utiliza el mismo directorio de trabajo
  • En qué rama estoy?
git branch
  • Cómo creo una rama?
git branch nueva_rama
  • Cómo cambio entre ramas?
git checkout nueva_rama
  • Cómo creo y cambio a la nueva rama?
git checkout -b nueva_rama
  • Como veo las diferencias entre ramas?
git diff una_rama..otra_rama

Algunos tips para trabajar con ramas

  • Se puede cambiar entre ramas y realizar commits en cada una de ellas.

  • Cada rama está separada y es independiente de las otras ramas, pero contiene todo lo que tenía la rama principal al momento del branching.

  • Antes de cambiar entre ramas, el directorio de trabajo debería estar sin conflictos ni cambios no registrados (commiteados).

Cómo combinar ramas?

Supongamos que agregamos algo nuevo en una feature_branch y lo queremos incorporar a la rama principal main. Cambiamos a main y desde allí traemos los cambios realizados en feature_branch:

git checkout main
git merge feature_branch

Conflictos cuando se combinan cambios/ramas

  • Se dan cuando dos commits tienen modificaciones sobre la misma línea de código.
  • git identificará los conflictos pero no los solucionará; queda a criterio del usuario.

Alternativas:

  • Abortar el merge git merge --abort
  • Arreglar manualmente los conflictos

Como evitar conflictos

  • Registrar los cambios en la rama de trabajo de manera frecuente.
  • Mantener cada commit simple y enfocado a determinados cambios/soluciones.
  • Combinar los cambios en la rama de trabajo (feature_branch o bug_fixing_branch) con la rama principal de manera frecuente.

Volviendo en el tiempo

Podemos ver los cambios que se estuvieron realizando y volver a versiones anteriores que ya fueron registradas (commiteadas).

git checkout archivo
git checkout branch
git checkout commitID


Deshacer cambios hechos antes de hacer el commit.

git reset HEAD nombreArchivo.r

Staging area

Deshacer cambios hechos luego de hacer el commit.

git commit --ammend -m "bla bla"

Repository

Qué es GitHub?

  • Es una plataforma que contiene repositorios almacenados en la nube, diferentes desarrolladores pueden contribuir a un único proyecto y ver los cambios realizados por otras personas.
  • GitHub ayuda a colaborar entre usuarios usando git.
git
  • git es un software para control de versiones. Permite llevar un registro de los cambios realizados en un proyecto.
GitHub
  • GitHub es una plataforma web que incorpora características de git para que puedan ser usadas de manera colaborativa.

GitHub workflow

Principales acciones en GitHub

Fork
El proceso de copiar el repositorio remoto de otro desarrollador en nuestro GitHub
Clone
Crea una copia local del repositorio y sincroniza entre las dos ubicaciones
Pull
Descarga contenido desde un repositorio remoto y actualiza el repositorio local
Pull request
Una vez que se realizan cambios, se pueden sugerir mediante pull request
Merge
La persona dueña del repositorio puede combinar los cambios sugeridos

Workflows en GitHub

Proyecto propio

  1. Crear un repo remoto y luego clonarlo
  1. Crear un repo local y agregar el remoto
echo "# Taller_IG_Git_GitHub" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/PPaccioretti/Taller_IG_Git_GitHub.git
git push -u origin main

  1. Si el repo local existe, agregar el remoto
git branch -M main
git remote add origin https://github.com/PPaccioretti/Taller_IG_Git_GitHub.git
git push -u origin main

Trabajo en repo propio

Hacer modificaciones locales y subirlas al repo remoto (pushear)

git add path/to/fileschanged
git commit -m "add new version of file x"
git push

Bajar cambios remotos/actualizar repo local

git pull

Workflows en GitHub

Proyecto colaborativo

Fork-ear el repo remoto al que queremos contribuir

Clonar el fork y descargarlo

 

 

 

 

Decirle quien es el repo remoto madre (upstream)

Qué estuvimos haciendo?

Cómo contribuimos al repo de alguien más?

  1. En nuestra copia local, creamos una nueva rama (feature branch)
  2. Hacemos modificaciones, las agregamos add al area de staging y las registramos commit(todo esto es local)
  3. Subir los cambios a nuestra copia remota o fork (origin)
  4. Desde nuestro fork, sugerimos el cambio al repo original (upstream) via un pull request

En commandos…

git checkout -b new-feature
git status
git add file_modified1 file_modified2 new_file
git commit -m "add new feature"
git push origin new-feature

Ejemplo:

Creamos el pull request

Una vez creado el PR, se pueden seguir haciendo commits desde la feature branch al PR

Merged pull request

Manos a la obra

Ejercitación

  1. Crea tu repo en GitHub, clonalo localmente y pushea alguna modificación
  2. Forkea el repo de esta presentación, clonalo y hacé un pull request

Muchas gracias!

veroandreo@gmail.com

pablopaccioretti@agro.unc.edu.ar