6 git para trabajar individualmente
6.1 Objetivos de aprendizaje
- Identificar por qué el control de versiones, específicamente Git, es importante para el desarrollo de software y análisis de datos.
- Diferenciar métodos para trabajar con Git y R: integración con RStudio.
- Aplicar el proceso de modificación-add-commit como el flujo de trabajo de Git para el seguimiento de los cambios y ver el historial de commits de un repositorio.
- Publicar repositorios en GitHub y coordinar versiones remotas y locales.
6.2 ¿Por qué git?
¿Tenés algo así en tu computadora?
/home/pao/Documents/Clases/progrmacion
├── script.R
├── tp.Rmd
├── tp_corregido.Rmd
├── tp_corregido2.Rmd
├── tp_final.Rmd
├── tp_finalfinal.Rmd
├── este_es_el_final.Rmd
├── juro_que_esta_es_la_ultima_version_del_tp.Rmd
└── FINAL.Rmd
Probablemente todos lo tenemos, o tuvimos algo así en algún momento, porque necesitamos guardar nuestro trabajo pero seguir teniendo acceso a versiones anteriores. Existe una solución para esto. Los sistemas de control de versiones gestionan la evolución y los cambios de un conjunto de archivos que llamaremos repositorio. Si alguna vez revisaste el historial de un archivo de Google Docs, el control de versiones es similar pero de una forma muy controlada. Git es un sistema de control de versiones muy popular, pero hay otros.
Si trabajas de manera individual, git es genial para hacer un seguimiento de los cambios y recuperar versiones anteriores de tus archivos. También podés utilizar un repositorio remoto (que veremos más adelante) para tener una copia de seguridad y compartir tu trabajo.
Si trabajas en equipo, podés aprovechar todo lo anterior y utilizar también el control de versiones como herramienta para colaborar y organizar las distintas versiones de un mismo archivo presentes en las múltiples computadoras que vos y las otras personas usen.
6.3 Pero, ¿qué entendemos por control de versiones?
Imaginemos que tenemos un repositorio funcionando (más adelante veremos cómo crear uno). Cuando creas un nuevo archivo como parte del repositorio (o repo), ese archivo inicialmente no es trackeado o no está versionado. Esto significa que git ignorará el archivo y cualquier cambio que hayas hecho hasta que lo agregues al repositorio (add en inglés) y empieces a registrar los cambios que hagas en el contenido. En ese momento el archivo está en el area staging (que podemos imagina como una sala de espera de git) y está listo para entrar en el repositorio. Para eso hay que confirmar o registrar (commit en inglés) esa versión del archivo en el repositorio. Este flujo de trabajo modify --> add --> commit
se repetirá cada vez que quieras guardar una versión del archivo.
No recomendamos hacer un commit cada vez que guardes el archivo o cambies una coma, y tampoco es buena idea hacer un commit con mil millones de cambios. Con la práctica y dependiendo de cómo trabajes, encontrarás un punto medio cómodo.
Mencionamos las acciones add
y commit
que son los nombres de dos comandos de git. Si tenes experiencia trabajando con la terminal podés utilizar git desde ahí, pero los mismos comandos pueden ejecutarse desde una GUI como GitHub Desktop o GitKraken. Durante este curso utilizaremos RStudio.
6.4 ¿Ya mencionamos “repositorio remoto”?
Antes revisamos el flujo de trabajo local. El repositorio (una carpeta oculta llamada .git
) vive en tu computadora y con eso ya estas usando control de versiones. Pero, también podrías conectar el repositorio local con un repositorio remoto. En este curso vamos a utilizar GitHub para alojar repositorios remotos, pero hay otras opciones que podrías explorar, como GitLab.
Si usas un repositorio remoto, tendrás que agregar un paso más al flujo de trabajo local (modify --> add --> commit
) para asegurarte que la copia del repositorio en tu computadora es la misma que la copia en GitHub y vise versa.
Luego, otra persona de tu equipo hace un cambio en un archivo en su repositorio local y lo sube al repositorio remoto. Ahora, tu repositorio local está “desactualizado” y necesitas descargar esos nuevos commits del repositorio remoto a tu computadora. Necesitas hacer pull.
Si luego, otra persona de tu equipo hace un cambio en un archivo en su repositorio local y lo sube al repositorio remoto. Ahora, tu repositorio local está “desactualizado” respecto del repositorio remoto. Necesitas descargar esos nuevos commits del repositorio remoto a tu computadora. Necesitas hacer pull.
Herramientas como GitHub también incluyen funciones que te ayudan a colaborar y gestionar repositorios. Por ejemplo, puedes modificar archivos y hacer commits con esos cambios utilizando la interfaz web.
6.5 Configuración inicial
Antes de crear tu primer repositorio es importante revisar que git esté configurado correctamente en tu computadora y que tengas permisos para modificar cosas en GitHub. Si seguiste las instrucciones instrucciones previas al curso deberías tener todo listo, pero podemos revisar el estado de situación con usethis::git_sitrep()
para comprobarlo.
> usethis::git_sitrep()
global (user)
── Git : "Pao Corrales"
• Name: "micorreo@gmail.com"
• EmailGlobal (user-level) gitignore file: ~/.gitignore
• : TRUE
• Vaccinated: "https"
• Default Git protocol: "main"
• Default initial branch name
── GitHub user : "https://github.com"
• Default GitHub hostfor "https://github.com": <discovered>
• Personal access token : "paocorrales"
• GitHub user: "gist", "repo", "user", and "workflow"
• Token scopesEmail(s): "micorreo@gmail.com (primary)", "paocorrales@users.noreply.github.com", and
• "otro correo@gmail.com"
ℹ No active usethis project.
Revisá que la información sea correcta y que Personal access token for "https://github.com":
sea igual a <discovered>
. Eso te garantizará que puedas trabajar con git y GitHub. Si vez alguna diferencia, es útil revisar las instrucciones de instalación en el anexo A Preparando el entorno de trabajo.
6.6 Creando un nuevo repositorio
Hay muchas formas de iniciar un nuevo repositorio, localmente en tu computadora utilizando la terminal, desde GitHub (o sus amigos) ¡o desde RStudio!. Aca te mostraremos cómo crear un repositorio desde GitHub, asociarlo a un proyecto de RStudio y trabajar con él. Pero tené en cuenta que hay muchas otras formas de trabajar con git.
1. Creá un repositorio online.
- Entrá en github.com e inicia sesión.
- En la esquina superior derecha, hacé click en el botón “+” y luego en “New repository”.
A continuación completá la información del repositorio:
- Repository template: No template.
- Repository name: como quieras llamar a tu nuevo proyecto.
- Description: Una descripción breve del proyecto. Escribila para los humanos.
- Visibilidad: Public.
- Initialize this repository with: nada (podemos configurarlo todo desde R).
Antes de volver a RStudio, copia la url del repositorio. Por ejemplo https://github.com/paocorrales/myrepo.git
Ya tenés tu repositorio local!
2. En RStudio, inicia un nuevo Proyecto:
File > New Project > Version Control > Git
. En la “URL del repositorio” pegá la URL de tu nuevo repositorio de GitHub, tiene que tener esta pinta:https://github.com/paocorrales/myrepo.git
.- Elejí la carpeta en tu disco donde querés crear el proyecto.
- Elejí “Open in new sesion”.
- Y hacé clic en “Create project”.
La nueva carpeta en tu computadora será un repositorio git, vinculado a un repositorio remoto de GitHub y un proyecto de RStudio al mismo tiempo. Este flujo de trabajo también se asegura de que toda la configuración entre los repositorios local y remoto se realice correctamente.
También agrega un archivo llamado .gitignore
que incluye una lista de archivos que no queremos sumar al repositorio (por ejemplo .Rhistory
).
6.7 Cambios locales
Es hora de poner en práctica algunas de las cosas de las que hemos estado hablando.
Add, commit
- Creá un nuevo archivo RMarkdown y guardalo.
- Agregalo al área de preparación con add y luego hace un commit. ¡Vas a tener que pensar un mensaje descriptivo!
- Hace un cambio en el archivo, puede ser cualquier cosa. Guardalo.
- Repetí el paso 2.
Si todo salió bien, empezaste a rastrear archivos, hiciste cambios y commits para guardar esa versión en el repositorio local. Puede que veas un mensaje en la pestaña de git diciendo que el repositorio local “is ahead of ’origin/master` by 2 commits”. No verás ningún cambio en GitHub hasta que hagas push y envíes esos commits al repositorio remoto. Podés hacer esto al final del día si preferis, pero si trabajas con otras personas puede ser una buena idea hacer push luego de cada commit.
¡Push!
- Ahora, hacé push para enviar los commits al repositorio remoto utilizando el botón con la flecha verde apuntando hacia arriba.
6.8 Cambios remotos
Volvamos a GitHub. Si actualizas la página, ahora verás los archivos que acabas sumar al repositorio o modificar. Hagamos click en “Commits” para ver la historia del repositorio. Desde esta página, podés explorar el repositorio en el “estado” en el que estaba con cada commit y ver las diferencias entre las distintas versiones.
Ahora, podemos intentar hacer cambios aquí.
Crear un README
- En la página principal, hacé click en el botón verde que dice “Add a README”.
- Agregá algo en el archivo. Los README suelen estar escritos en Markdown y contienen información sobre el repositorio.
- Al final de la página añadí un mensaje y hacé click en “Confirm changes…”.
- Volvé a la página principal para ver el README.
El nuevo archivo y los cambios que hagas en GitHub sólo estarán en el repositorio remoto hasta que hagas un pull en el repositorio local. Si realizas cambios en el repositorio local mientras no está actualizado, podés encontrarte con conflictos cuando intentes unir las 2 versiones, lo que suele generar dolores de cabeza. Esto ocurre cuando la versión de un archivo en el repositorio local no es compatible con su versión en el repositorio remoto. En esos casos, git no puede decidir qué versión es la correcta y tenés que hacerlo vos.
Para evitar este problema (lo más posible), tenes que hacer un pull antes de empezar a hacer cualquier otra cosa. La mayoría de las veces RStudio mostrará el mensaje “Already up to date”, pero es bueno hacerlo un hábito.
Pull desde GitHub
- Volvé a RStudio.
- Revisá panel de Git.
- Hacé click en la flecha azul que dice “Pull”.
- Revisá el archivo README en la pestaña Archivos.
6.9 Anatomía de un repositorio de GitHub
Archivos README. Utilizá un
README.md
para explicar de que se trata es tu proyecto y cómo utilizarlo.README.md
es el archivo que se muestra automáticamente cuando abrís un repositorio de GitHub.Licencia. La licencia le indica a las personas cómo puede utilizar el contenido de tu repositorio. Generalmente, utilizamos licencias permisivas para que las personas pueda utilizar los materiales de cualquier manera. Algunos ejemplos son la Licencia MIT o Apache. Podés revisar algunos recursos extra:
- Elejí una licencia para proyectos de código.
- Licencias de software en lenguaje sencillo: explica la jerga legal de las licencias en términos sencillos
Guía para colaborar. Un archivo llamado
CONTRIBUTING.md
que incluye las instrucciones que personas que quieren conlaborar en tu proyecto sepan lo que deben hacer si quieren ayudarte.Código de conducta. Los buenos proyectos tienen códigos de conducta para garantizar un ambiente amigable donde las personas pueden colaborar. Github tiene atajos para agregar Código de Conducta facilmente.
Issues. Te permiten gestionar el proyecto, discutir problemas y mejoras con otras personas.
Para practicar git y de paso lo que estuvimos viendo sobre manipulación de datos vamos a usar GitHub Classroom.
¿Cómo funciona?
Preparamos repositorios con distintos ejercicios para que resuelvan. Cada persona tendrá su repositorio para trabajar de manera individual, aunque siempre pueden resolver los ejercicios en grupos (pequeños!, 2 o 3 personas)
En el campus encontrarás las instrucciones para acceder a tu repositorio.