¡Miercolés, Git!

¿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.

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

¿Porqué Git?

Después de confirmar una copia instantánea en Git es muy difícil perderla, especialmente si envías tu base de datos 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. 😱

  • Push de datos secretos o largos
  • Commits que nos dan vergüenza
  • Commits en ramas equivocadas

Nuestros objectivos hoy

💪 Prevenir algunos problemas

💪 Practicar la salida de algunas situaciones horibles

Prevención: saber donde estás

👀 Staging area

👀 Rama

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

Prevención: escapar de Vim

Es dificil usar y salir de Vim…

A lo mejor no entres!

Arreglar el editor de Git

Crea un proyecto Git

caperta <- withr::local_tempdir()
usethis::create_project(carpeta)

En la carpeta

usethis::use_git()

Proba tu editor

git commit --allow-empty
# se abre un editor

Arreglar el editor de Git

# tu configuración
config <- gert::git_config_global()
# ya tienes una preferencia de editor?
config$value[config$name == "core.editor"]
# cambiala si hace falta
gert::git_config_global_set(name = "core.editor", value = <QUÉ-PREFIERES>)
# para mi es "/usr/bin/positron --wait"

Tienes 10 minutos para arreglarlo!

A practicar situaciones horibles!

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

Mi ultimo commit me da vergüenza 1/2

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

Mi ultimo commit me da vergüenza 2/2

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

Mi ultimo 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)

Hicé el commit en una rama equivocada 1/2

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

Hicé el commit en una rama equivocada 2/2

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

Hicé 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)

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)

Hicé algo horible con rebase -i o otra barbaridad

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

Solucionalo 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 miercolés.

Otras situaciones que no vimos

Git resources: General books

Git resources: R

Git resources: others