-
Notifications
You must be signed in to change notification settings - Fork 2
/
GitHubIntro.Rmd
364 lines (263 loc) · 9.51 KB
/
GitHubIntro.Rmd
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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
---
title: "Introducción a GitHub para R"
output:
ioslides_presentation:
fig_width: 7
fig_height: 6
---
<style>
p.caption {
font-size: 0.6em;
}
</style>
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
## Agradecimientos
- Este documento se basa en "Happy Git with R" de Jenny Bryan, los STAT 545 TAs, Jim Hester
https://happygitwithr.com
## 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.
## Por qué hacer control de versiones de nuestros proyectos?
```{r, out.width = '40%'}
knitr::include_graphics('Figure10.png')
```
## 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
```{r, out.width = '60%'}
knitr::include_graphics('Figure4.png')
```
## Versión de controles a mano
```{r, fig.cap="Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017", out.width = '50%'}
knitr::include_graphics('Figure5.png')
```
## Versión de control en Git
```{r, fig.cap="Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017", out.width = '80%'}
knitr::include_graphics('Figure1.png')
```
## 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.
```{r, fig.cap="Excuse me, do you have a moment to talk about version control?, Jennifer Bryan, 2017", out.width = '60%'}
knitr::include_graphics('Figure6.png')
```
## GitHub
- GitHub es una plataforma que permite guardar código en forma de repositorios Git.
```{r, out.width = '80%'}
knitr::include_graphics('Figure8.png')
```
## 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:
```{bash eval=FALSE, echo=TRUE}
which git
git --version
```
- Si no lo tienen instalado:
- MAC: Usen Xcode.
- Linux: Usen apt-get o yum para instalar git
- Windows: [here](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
## Ahora con 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"
## 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"
```{bash eval=FALSE, echo=TRUE}
which git
git clone https://mylink.com/you/your_repo
```
## Usemos el repositorio!
- Vamos a usar el repositorio como nuestro lugar de trabajo:
```{bash eval=FALSE, echo=TRUE}
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
```{bash eval=FALSE, echo=TRUE}
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
```{bash eval=FALSE, echo=TRUE}
git add README.md
git commit -m "A commit from my local computer"
git push
```
## 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
- Algunas instalaciones de Git son muy listas y guardan el username y password, así que no lo tenemos que poner en cada push.
- Si por algo no está funcionando
Pueden seguir estos tutoriales para arreglarlo
https://happygitwithr.com/credential-caching.html
-Les recomiendo revisar cómo hacer conecciones con llaves ssh.
GitHub se mueve a establecerlo como standar
https://happygitwithr.com/ssh-keys.html
## 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
```{r, out.width = '60%'}
knitr::include_graphics('Figure9.png')
```
## 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
```{r echo=TRUE, eval=FALSE}
---
title: "RmarkwondTest"
output:
html_document:
keep_md: true
---
```
## Si les gustó Rmarkdown
```{r, out.width = '100%'}
knitr::include_graphics('Figure11.jpg')
```
## 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
- Un repository o repo es un grupo de archivos manejado por Git
```{r, fig.cap="https://happygitwithr.com/git-basics.html", out.width = '60%'}
knitr::include_graphics('Figure2.png')
```
## Git basics: commands
- Clone
```{bash eval=FALSE, echo=TRUE}
git clone https://repor.com
```
- Agregar un archivo al repo (solo una vez) y hacer commit
```{bash eval=FALSE, echo=TRUE}
git add newfile.R
git commit -m "mensaje informativo" newfile.R
```
## Git basics: commands
- Qué pasó?
```{bash eval=FALSE, echo=TRUE}
git status
git log
git log --oneline
```
- Comparar versiones
```{bash eval=FALSE, echo=TRUE}
git diff
git diff myfile.R
```
## Git basics: commands
- Push
```{bash eval=FALSE, echo=TRUE}
git push
```
- Pull y pull evitando conflictos de merge (Fusión!)
```{bash eval=FALSE, echo=TRUE}
git pull
git pull --ff-only
```
## Git basics: commands
- Fetch Commits
```{bash eval=FALSE, echo=TRUE}
git fetch
```
- Create and Switch to a branch
```{bash eval=FALSE, echo=TRUE}
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í:
```{r echo=TRUE, eval=FALSE}
<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</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!
```{bash eval=FALSE, echo=TRUE}
git merge --abort t
```
## En resumen
```{r, fig.cap="https://xkcd.com", out.width = '40%'}
knitr::include_graphics('Figure3.png')
```