-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path04_git-1.qmd
201 lines (124 loc) · 12.8 KB
/
04_git-1.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
---
title: git para trabajar individualmente
---
## 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.
## ¿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 has mirado el historial de un archivo de Google Docs, es así 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 estupendo para hacer un seguimiento de los cambios y recuperar versiones anteriores de tus archivos. También puedes 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.
## Pero, ¿qué entendemos por control de versiones?
Imaginemos que tenemos un repositorio funcionando ([más adelante](04-git-1/#crear-un-nuevo-repositorio) veremos cómo crear uno). Cuando creas un nuevo archivo como parte del repositorio (o *repo*), ese archivo 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 sus cambios. En ese momento el archivo está en el area **staging** (en el escenario de git) y está listo para entrar en el repositorio. Para eso hay que *confirmar* (*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.
::: tip
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](https://desktop.github.com/) o [GitKraken](https://www.gitkraken.com/). Durante este curso utilizaremos RStudio.
## ¿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](https://www.github.com) para alojar repositorios remotos, pero hay otras opciones que podrías explorar, como [GitLab](https://about.gitlab.com/).
Imaginemos que tenemos un repositorio local, hicimos cambios en un archivo y luego _commits_ para guardar esa nueva versión. Ahora necesitamos enviar esos cambios al repositorio remoto (más adelante veremos cómo crear el repositorio remoto). Para ello **empujamos (push en inglés)** los _commits_ al repositorio remoto y entonces, los dos repositorios están "actualizados", tienen la misma versión de los archivos.
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**.

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.
## Preséntate con Git
Antes de crear tu primer repositorio tenes que asegurarte de que git y RStudio se entienden y de que git te conoce. Si seguiste las instrucciones [instrucciones previas al curso](A_instalacion.html) seguro que RStudio, git y GitHub se hablan entre sí.
::: importante
Podés comprobar que RStudio "sabe" donde está git yendo a `Tools --> Global Options --> Git/SVN`. Allí deberías encontrar la ruta en tu computadora a la instalación de git.
:::
Para presentarte con git, es decir, para que reconozca tu nombre y correo electrónico, puedes utilizar el comando `use_git_config` del paquete *usethis*.
``` r
library(usethis)
use_git_config(user.name = "Juan Perez",
user.email = "[email protected]")
```
Sustituyéndolo por tu nombre y el correo electrónico asociado a tu cuenta de GitHub.
## 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.
::: ejercicio
**1. Creá un repositorio online.**
- Entrá en [github.com](https://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`
:::
::: ejercicio
**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 haz 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`).
## Cambios locales
Es hora de poner en práctica algunas de las cosas de las que hemos estado hablando.
::: ejercicio
**Add, commit**
1. Creá un nuevo archivo RMarkdown y guardalo.
2. Agregalo al área de preparación con _add_ y luego hace un _commit_. ¡Vas a tener que pensar un mensaje descriptivo!
3. Hace un cambio en el archivo, puede ser cualquier cosa. Guardalo.
4. 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.
::: ejercicio
**¡Push!**
1. Ahora, hacé _push_ para enviar los commits al repositorio remoto utilizando el botón con la flecha verde apuntando hacia arriba.
:::
## 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í.
::: ejercicio
**Crear un README**
1. En la página principal, hacé click en el botón verde que dice "Add a README".
2. Agregá algo en el archivo. Los README suelen estar escritos en Markdown y contienen información sobre el repositorio.
3. Al final de la página añadí un mensaje y hacé click en "Confirm changes...".
4. 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.
::: ejercicio
**Pull desde GitHub**
1. Volvé a RStudio.
2. Revisá panel de Git.
3. Hacé click en la flecha azul que dice "Pull".
4. Revisá el archivo README en la pestaña Archivos.
:::
## 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](https://choosealicense.com/).
- [Licencias de software en lenguaje sencillo](https://tldrlegal.com/): 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.
::: ejercicio
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.
:::