Agradecimientos

Por qué hacer control de versiones de nuestros proyectos?

  • Los proyectos suelen cambiar y crecer.
  • Es difícil saber cuáles fueron todos los cambios a lo largo del tiempo (en especial tiempos largos, hazlo por tu yo del futuro!).
  • Las colaboraciones se pueden complicar sin un buen control de versiones.
  • Seguridad

Por qué hacer control de versiones de nuestros proyectos?

Git

  • Git es un sistema de control de versiones.
  • Git funciona con GitHub, Bitbucket o GitLab
  • Por qué usar Git en vez de solo renombrar los archivos?

Por que es mejor tener una filogenia del archivo

Versión de controles a mano

Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

Versión de control en Git

Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

Versión de control en Git

  • Con Git cada contribuidor tiene una copia del repositorio central, con todos los archivos y la historia de los cambios por los que han pasado.
Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017

GitHub

  • GitHub es una plataforma que permite guardar código en forma de repositorios Git.

Qué necesitamos para que esto funcione?

  • Necesitamos Git en la computadora
  • Necesitamos que Git en nuestra computadora le hable a GitHub (o el repositorio que quieran usar, pude ser GitLab, Bitbucket, etc).
  • Luego necesitamos que R hable con este repositorio.

Recomendaciones para sus proyectos

  • Dedicar un directorio
  • Es mejor organizarlo en un RStudio Project
  • Hacer un repositorio de Git
  • Trabajen como siempre, solo además de guardar, recuerden hacer commit
  • De vez en vez hagan push de sus cambios cuando los hayan verificado.

Proyectos colaborativos

  • GitHub se parece más a un GoogleDoc que a un Word Document.
  • Es fácil que los colaboradores hagan cambios y también es fácil saber quién hizo que.
  • El owner del proyecto puede dar permisos a los diferentes colaboradores.
  • También existen organizaciones, esto puede ser útil para manejar los permisos de grupos grandes de colaboración.

Detalles especiales de GitHub

  • Issues: Issue reports, es fácil saber de dónde vino un reporte y si se arregló.
  • Pull requests: Los usuarios pueden solicitar contribuir y hacer cambios.

R in GitHub

  • La comunidad de R es muy activa en GitHub.
  • Hay muchos paquetes ahí.
  • Al ser parte de GitHub será más fácil que su código se utilice por la comunidad.
  • GitHub y RStudio se conectan muy bien.
  • Si R no es su lenguaje favorito, también se pueden beneficiar de usar Rstudio para manejar su repositorio.

Ahora, a darle!

  • Ya tenemos R y RStudio.
  • Necesitamos una cuenta en GitHub, registren una si no tienen.
  • Ahora vamos a:
    • Revisar la instalación de Git
    • Familiarizarnos con GitHub
    • Conectarnos a GitHub

Instalación de Git

  • Como parte de los requerimientos les pedimos tener Git.
  • Pueden revisar si todo está bien con el siguiente comando en su terminal:
which git
git --version
  • Si no lo tienen instalado:
  • MAC: Usen Xcode.
  • Linux: Usen apt-get o yum para instalar git
  • Windows: here

Crear un repositorio en GitHub!

  • Hagan login y creen un repositorio nuevo
  • Denle nombre: en mi caso use MiRepo
  • Añadan una descripción: My mini repo
  • Inicialicen el repositorio con un README
  • Para lo demás usen los defaults
  • Den Click en “Create repository”

Cómo clonar un repositorio y tener conección/permisos para modificarlo?

  • Git puede comunicarse con un servidor remoto usando uno de dos protocolos, HTTPS o SSH, y cada protocolo usa credenciales diferentes.

  • La recomendación actual de GitHub es usar HTTPS porque es la manera más fácil de configurar.

    • Es menos probable que HTTPS sea bloqueado por un firewall.
    • Es más sencillo acceder a un repositorio desde cualquier lugar, ya que solo necesitas los detalles de tu cuenta.
  • HTTPS requiere un token personal (PAT), este token es interpretado como un password, por lo que no debes perderlo ni compartirlo nunca.

Traer el repositorio a nuestras compus

  • Ya tenemos el repositorio en GitHub
  • Para de verdad poderlo usar, lo tenemos que traer a nuestras computadoras, Clonenlo!
  • Copien la liga en “Clone or download”
which git
git clone https://mylink.com/you/your_repo

Esto trae el repositorio a nuestra compu local y nos permite mantenerlo al día usando el comando git pull pero no nos permitirá modificarlo.

Para eso requerimos un token.

Cómo crear un token?

  1. Ve a tu perfil de GitHub, dale click a la imagen de perfil (usualmente en la esquina superior derecha), y busca la opción de settings ó configuración según sea la configuración de idioma que tengas.

  2. Da click a continuación en Developer settings ó Parámetros del desarrollador.

  3. En la barra lateral izquierda da click en Tokens de acceso personal.

  4. Haz click en Generar un nuevo token.

  5. Asígna un nombre descriptivo a tu token. Esto es muy importante, pronto tendrás muchos tokens y si llegas a tener problemas es muy importante que los puedas identificar.

Cómo crear un token?

  1. Selecciona los alcances o permisos que deseas otorgarle a este token. Para usar tu token para acceder a repositorios desde la línea de comando, selecciona repo.

  2. Finalmente haz click en generar token.

  3. Listo, copia y pega tu token en el lugar dónde siempre lo puedas volver a copiar, ya que por razones de seguridad, una vez salgas de la página no podrás volver a ver el token.

Una vez que tengas un token, debes ingresarlo en lugar de tu contraseña cuando realices operaciones de Git a través de HTTPS.

Usemos el repositorio!

  • Vamos a usar el repositorio como nuestro lugar de trabajo:
cd myrepo
ls -la
head README.md
git remote show origin
  • Qué nos dice este comando?

Usemos el repositorio!

  • Probemos haciendo un cambio en el README
echo "Something I want to add to the README in my local computer" >> README.md
git status
  • Qué pasó?

  • Ahora tenemos que decirle a git que queremos seguir los cambios de ese archivo

  • Vamos a commit los cambios y luego a subir (push) los mismos a GitHub

git add README.md
git commit -m "A commit from my local computer"
git push

Recuerda tu TOKEN!!

Usemos el repositorio!

  • Add es algo que se hace la primera vez que se usa un archivos. Con la opción -A se agregan todos los archivos de un folder.
  • Piensen bien antes de hacer eso! a veces no queremos todos los archivos en un folder.
  • Usen mensajes INFORMATIVOS en los commits, pude ser información muy útil en el futuro.
  • Ahora verifica si los cambios se subieron a GitHub

Credenciales en Git

Cómo crear y manejar un Token desde R?

Puedes ir directamente a la página de GitHub a la parte para generar tu token de acceso personal mediante la siguiente función:

usethis::create_github_token()

Y con las opciones que se mencionaban anteriormente puedes configurar y crear tu PAT.

Si lo que quieres es especificar tu PAT en RStudio, las siguientes funciones te serán útiles:

Cómo crear y manejar un Token desde R?

library(gitcreds)

gitcreds_set()

Para eliminar credenciales utiliza la función credentials::git_credential_forget()

Conectando Git y RStudio

  • Hasta ahora todo lo de Git ha sido en línea de comando
  • Pero RStudio nos puede ayudar con esto
  • Para lograrlo, primero necesitamos que RStudio se conecte con Git
  1. Crea un proyecto en RStudio desde un repositorio de Git. File > New Project > Version Control > Git
  2. En dónde vas a guardar ese repositorio?
  3. Lo logramos! Git va a aparecer en la esquina superior derecha
  4. Hagamos un cambio en el README

Commit y push en RStudio

Desde RStudio:

  • Da click en el “Git” tab el panel superior derecho.
  • Haz click en “Staged” para README.md.
  • Da click en “Commit”.
  • Escribe un mensaje útil en “Commit message”.
  • Click “Commit”.
  • Click “push”

Rmarkdown

  • Son archivos con extensión .Rmd
  • Nos permiten documentar de forma sencilla nuestro código

Rmarkdown en GitHub

  • Creemos un Rmakrdown y subámoslo a GitHub
  • Ahora hay que agregarlo al repositorio (add), stage and commit.
  • Subieron el hmlt? Qué tal se ve?
  • No se ve como queremos, verdad? Para eso necesitamos recuperar el .md. El .md es un resultado intermedio de crear el html desde Rmd.
  • Tenemos que cambiar el header para esto
---
title: "RmarkwondTest"
output: 
  html_document:
    keep_md: true
---

Si les gustó Rmarkdown

Busquén en el canal de youtube de la CDSB

Actividad

  • Usa el código dir.create("mis_imagenes") en la consola de tu sesión de RStudio (la que está vinculada a tu repositorio). Ejecuta el siguiente código quitando los #:
install.packages("MASS")
library (MASS)
data(MASS::cats)
# pdf("mis_imagenes/cats_plot.pdf") 
ggplot(cats, aes(x = Sex)) + 
    geom_bar(fill = "orange", color = "black") + theme_classic() +
    xlab("Sexo") + ylab("Número de Gatos") + ggtitle("Gatos")
# dev.off()
  • Comenta y da push a los cambios que realizaste en el repositorio.

RStudio primero y GitHub después

Usa uno de los proyectos que hayas generado en las sesiones anteriores, PERO, que no esté enlazado a GitHub. Ahora veremos como conectar un proyecto de R existente con GitHub. Realiza los pasos que hicimos en GitHub primero, RStudio después pero asegurate de crear un repositorio con un nuevo nombre.

Y LISTO!! usa un simple ctrl + c, ó mv ó click derecho + copiar ó el método que prefieras para mover o copiar archivos. Copia los archivos de tu antigüo proyecto al proyecto nuevo. Solo haz commit y push y listo, lo que tenía en tu antigüo proyecto ya está enlazado a GitHub.

Proyecto existente, GitHub al final

Supongamos que tenemos un proyecto de R existente en algún lugar de nuestra computadora.

NOTA: Para generar proyecto de RStudio desde la consola puedes utilizar el siguiente código:

O en RStudio con File > New Project > Existing Directory

Si su proyecto ya es un proyecto de RStudio, ejecútenlo.

Proyecto existente, GitHub al final

¿Ya es un repositorio de Git? La presencia del panel de Git debería alertarlo. Si es así, has terminado.

Sino este es el primer camino a seguir:

  • Con el páquete usethis usa la función usethis::use_git
  • En RStudio ve a Tools > Project Options > Git/SVN. Dentro de Version control system, selecciona Git. Y da click a “Yes” cuando aparezca “Confirm New Git Repository?”.

Si usaste RStudio o usethis, el proyecto debería reiniciarse en RStudio. Hazlo tu mismo si hizo git init. RStudio ahora debería tener un panel Git.

Git basics: commands

  • Qué pasó?
  • Qué hacemos ahora?
  • Ahora ya tienes todo para subir tus cosas a GitHub y documentarlas bonito!

Git basics: Repository, diff

Git basics: commands

  • Clone
git clone https://repor.com
  • Agregar un archivo al repo (solo una vez) y hacer commit
git add newfile.R
git commit -m "mensaje informativo" newfile.R

Git basics: commands

  • Qué pasó?
git status
git log
git log --oneline
  • Comparar versiones
git diff
git diff myfile.R

Git basics: commands

  • Push
git push
  • Pull y pull evitando conflictos de merge (Fusión!)
git pull
git pull --ff-only

Git basics: commands

  • Fetch Commits
git fetch
  • Create and Switch to a branch
git branch [branch-name]
git checkout [branch-name]

Merge conflics

  • A veces, no tan a veces también, las cosas no salen bien a la primera
  • Merging (Fusionar) es una de esas cosas
  • Cuando bajamos un cambio o fusionamos branches esto puede pasar.
  • Primera regla: NO ENTRAR EN PANICO!!!
  • Revisen el status del repositorio. Qué archivo tiene conflicto?

Merge conflics

  • Abran ese archivo y busquen los problemas de merge. Es fácil, se ven así:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> issue-5:index.html
  • Editen esa sección, dejen una versión final.
  • Hagan commit y push
  • Si entran en pánico? Aborten la misión!
git merge --abort t

En resumen