¡Miércoles, Git!

¿Qué es Git?

Git es un Sistema de Control de Versión (VCS).

¿Qué es Git?

Git se [parece] más a un sistema de archivos miniatura con algunas herramientas tremendamente poderosas desarrolladas sobre él, que a un VCS [(sistema de control de versión)].

Scott Chacon, Pro Git (traducción en español)

¿Por qué Git?

Después de confirmar [un commit] en Git es muy difícil perderla, especialmente si envías [esos cambios] a otro repositorio con regularidad.

Scott Chacon, Pro Git (traducción en español)

Además

📜 Historia que usar

🌳 Ramas

En realidad…

A veces duele. 😱

Podéis compartir cosas feas que os pasaron con Git?

En realidad…

A veces duele. 😱

  • Push de datos secretos (llave de API por ejemplo)
  • Push de datos pesados
  • Commits que nos dan vergüenza
  • Commits en ramas equivocadas

Nuestros objetivos hoy

💪 Prevenir algunos problemas

💪 Practicar cómo salir exitosamente de algunas situaciones horribles

Como vamos a trabajar

En tu entorno de Git habitual.

Podéis escribir lo que es su forma de usar Git? Yo: Positron+terminal a veces.

RStudio

Mostrar donde esta Git, la consola de R, la terminal.

Positron

Mostrar donde esta Git, la consola de R, la terminal.

Otra IDE

Alguién se atreve a compartir?

Prevención: usethis::git_sitrep()

# hoy solo Git
usethis::git_sitrep(tool = "git", scope = "user")

https://usethis.r-lib.org/reference/git_sitrep.html

Prevención: saber donde estás

👀 Staging area

👀 Rama

👀 Remote (GitHub?) vs local (tu ordenador)

Como vamos a trabajar

En carpetas temporarias creadas por saperlipopette.

Asi no rompemos nuestros proyectos importantes.

{saperlipopette}

Una herramienta para usar Git

Un paquete R para crear ejercicios en carpetas propias.

https://docs.ropensci.org/saperlipopette/

install.packages(
  'saperlipopette', 
  repos = c('https://packages.ropensci.org', 'https://cloud.r-project.org')
)

saperlipopette

saperlipopette: R para crear ejercicios de Git

  • R para crear el ejercicio en otra carpeta.

  • R en la nueva sesión para leer las instrucionnes.

  • Tus herramientas usuales para solucionar el problema de Git!

saperlipopette: cómo usar el paquete

  • Llama una función desde una sesión R.

  • Va a la carpeta creada (se ve en el output).

  • Abre R en esta carpeta, lee las instrucciones.

  • Trabaja con tus herramientas para Git o la terminal.

  • Cierra la sesion de ejercicio.

Prevención: escapar de Vim

Es difícil usar y salir de Vim…

Entonces mejor no entres!

Arreglar el editor de Git

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_check_editor(carpeta)

Arreglar el editor de Git

Tienes 10 minutos para arreglarlo!

A practicar situaciones horribles!

Haré demos y después las haréis también.

Mi último commit me da vergüenza 1/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_one_small_change(carpeta)

Mi último commit me da vergüenza 2/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_latest_message(carpeta)

Mi último commit me da vergüenza

15 minutos para resolver estos ejercicios. 😈

withr::local_language("es")
carpeta1 <- withr::local_tempdir()
saperlipopette::exo_one_small_change(carpeta1)
carpeta2 <- withr::local_tempdir()
saperlipopette::exo_latest_message(carpeta2)

Descanso (5 minutos) 😮‍💨

Mis cambios eran equivocados 1/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_undo_commit(carpeta)

Mis cambios eran equivocados 2/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_revert_file(carpeta)

Mis cambios eran equivocados

15 minutos para resolver estos ejercicios. 😈

withr::local_language("es")
carpeta1 <- withr::local_tempdir()
saperlipopette::exo_undo_commit(carpeta1)
carpeta2 <- withr::local_tempdir()
saperlipopette::exo_revert_file(carpeta2)

Hice el commit en una rama equivocada 1/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_committed_to_main(carpeta)

Hice el commit en una rama equivocada 2/2

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_committed_to_wrong(carpeta)

Hice el commit en una rama equivocada

15 minutos para resolver estos ejercicios. 😈

withr::local_language("es")
carpeta1 <- withr::local_tempdir()
saperlipopette::exo_committed_to_main(carpeta1)
carpeta2 <- withr::local_tempdir()
saperlipopette::exo_committed_to_wrong(carpeta2)

Descanso (5 minutos) 😮‍💨

Hice algo horrible con rebase -i u otra barbaridad

withr::local_language("es")
carpeta <- withr::local_tempdir()
saperlipopette::exo_time_machine(carpeta)

Soluciónalo tu también en 10 minutos.

Prevención otra vez

.gitignore

Demo

  • Creo carpeta-secreta/.

  • La veo en la staging area.

  • Añado carpeta-secreta a mi .gitignore.

  • No la veo más en la staging area.

Vacuna

usethis::git_vaccinate()

https://usethis.r-lib.org/reference/git_vaccinate.html

¿Y si hicé un push de mi error?

🚀 git push -f

Pero

🔥 no en ramas compartidas

🔥 no elimina completamente el commit antiguo en GitHub https://github.com/ropensci-training/saperlipopette/pull/26

Conclusión

¿Cómo sufrir menos con Git?

Prevenir problemas: saber donde estás, no usar Vim, usar .gitignore.

Aprender a salir de situaciones de miércoles.

Otras situaciones que no vimos

¡Gracias! 💙 Gracias a Andrea Gomez Vargas, Ariana Bardauil y Yanina Bellini Saibene.

https://miercoles-git-mejor.netlify.app/

https://docs.ropensci.org/saperlipopette/

Recursos de Git: en español

Git resources: General books

Git resources: R

Git resources: others