Git para economistas

Introducción a sistemas de control de versión

Nicolás Franz-Pattillo

Los proyectos son complejos

  • Intentamos responder preguntas difíciles.
  • Necesitamos que las respuestas sean replicables.
  • Necesitamos colaborar.

Los proyectos son complejos

  • Hoy en día no es raro que los proyectos contengan mas de un archivo.
    • Texto
    • Resultados: tablas y gráficos
    • Programas: *.do, *.m, *.prg, etc.
  • Tampoco es raro que tengan varios colaboradores.
  • Las láminas estáticas están quedando en el pasado. El futuro son las aplicaciones web y dashboards.

Los proyectos son complejos

  • Hoy en día no es raro que los proyectos contengan mas de un archivo.
    • Texto
    • Datos y gráficos
    • Programas: *.do, *.m, *.prg, etc.
  • Tampoco es raro que tengan varios co-autores.
  • Los afiches están quedando en el pasado, el futuro son las aplicaciones web.
Problema: Cómo hacer avanzar un proyecto de forma ordenada
$$\implies$$
Solución *: Coordinando una forma de hacer y registrar los cambios
Control de versión "naive"
Control de versión

"naive"

  • Si no registramos cambios de forma sistemática, nuestra capacidad de identificar cambios esta sujeta a la "maldición de la dimensionalidad"
    • Riesgos de continuidad operacional (innovar es costoso)
    • Poca colaboración y replicabilidad (sentido común?)
    • La historia se pierde (generalmente en la carpeta "old")
Control de versión

"naive"

  • Los programadores han tenido este problema por décadas.
  • Las soluciones (software) han ido evolucionando con el tiempo. En general se les conoce como sistemas de control de versión
  • La mayoría de ellos presenta al usuario la versión que se quiere revisar y deja el resto fuera de la vista.
control de versión

Sistema de

  • La mayoría de ellos presenta al usuario la versión que se quiere revisar y deja el resto fuera de la vista.
  • Permiten identificar cambios entre versiones porque registran la primera derivada.
  • Son eficientes en el uso de espacio y tiempo.
  • 👎 Requieren entender su funcionamiento y terminología

En esta presentación

  1. Cómo un sistema de control de versión puede facilitar nuestro trabajo?
  2. Qué necesitamos para poder empezar a utilizarlos?
  • Disclaimer: el control de versión se realiza sobre "código", no sobre datos

Repo, commit, working copy ...

me no english!

  • Los softwares de control de versión comparten una terminología común (al igual que muchos lenguajes de programación comparten el condicional if... then... else y los bucles for o while)
    1. Commit : Fotografía del proyecto en un momento del tiempo.
    2. Repository: ("Repo") Proyecto completo, incluyendo su historia.
    3. Working copy / Head: Versión del proyecto en la cual se está trabajando.

Sistemas de control de versión

Sistemas de control de versión

1. Local

Repository Working Copy Computador 1 commit update

Sistemas de control de versión

2. Distribuido

Repository Working Copy Computador 1 commit update Repository Servidor push fetch push fetch Repository Working Copy Computador 2 commit update

Sistemas de control de versión

3. No Distribuido

Working Copy Computador 1 Repository Servidor commit update Working Copy Computador 2 commit update

preguntas?

QUÉ ES GIT?

QUÉ ES GIT?

  • Git es un sistema distribuido de control de versión. El más utilizado en el mundo!
  • El software de Git se instala "localmente". Para empezar a utilizar Git no es necesario un servidor. No obstante, este último mejora la colaboración significativamente
  • Git es automáticamente instalado con algunos programas. Algunos de ellos ampliamente utilizados por economistas (e.g., Python-Anaconda, o command line tools de MacOs, Matlab 2020b)
  • Git no es lo mismo que GitHub! GitHub es una "red social" que utiliza la arquitectura Git como base. Otros ejemplos son GitLab y BitBucket

CÓMO SE USA GIT?

CÓMO SE USA GIT?

  • Git se usa a través de la linea de comando (shell, console, terminal, etc.) e interfaces gráficas de usuario (GUI)

    Linea de comando

  • El uso básico de Git en la linea de comando requiere conocer entre 5 y 10 comandos.

CÓMO SE USA GIT?

  • Hay muchas interfaces de usuario gráficas (GUI) que lo hacen mas amigable

CÓMO SE USA GIT?

  • Hay muchas interfaces de usuario gráficas (GUI) que lo hacen mas amigable

CÓMO SE USA GIT?

  • Hay muchas interfaces de usuario gráficas (GUI) que lo hacen mas amigable

CÓMO SE APRENDE GIT?

  • La mejor forma de aprender Git es usándolo!!
  • La mayor parte de la documentación es a través de la línea de comando.
  • Esto no quiere decir que el usuario lo use a través de ella, pero le da uniformidad al proceso (Las GUI pueden tener formas diversas de implementar Git y aprenderlas es difícil si no se entiende el objetivo. Es como querer aprender MS excel sin saber matemáticas)
  • Con el tiempo, el uso y la terminología Git se vuelve natural

Ejemplo

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project
    1. Navegar hasta la carpeta
    2. Usar git init
bash ~ $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project
    1. Navegar hasta la carpeta
    2. Usar git init
bash ~ $ cd Desktop/project |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project
    1. Navegar hasta la carpeta
    2. Usar git init
bash ~ $ cd Desktop/project ~/Desktop/project $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project
    1. Navegar hasta la carpeta
    2. Usar git init
bash ~ $ cd Desktop/project ~/Desktop/project $ git init |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
    1. Navegar hasta la carpeta
    2. Usar git init
bash ~ $ cd Desktop/project ~/Desktop/project $ git init Initialized empty Git repository in / Desktop/project/.git/ master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash ~ $ cd Desktop/project ~/Desktop/project $ git init Initialized empty Git repository in / Desktop/project/.git/ master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash ~ $ cd Desktop/project ~/Desktop/project $ git init Initialized empty Git repository in / Desktop/project/.git/ master $ git add -A master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash ~ $ cd Desktop/project ~/Desktop/project $ git init Initialized empty Git repository in / Desktop/project/.git/ master $ git add -A master $ git commit -m "Primer

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash ~ $ cd Desktop/project ~/Desktop/project $ git init Initialized empty Git repository in / Desktop/project/.git/ master $ git add -A master $ git commit -m "Primer commit, modelo corriendo" [master (root-commit) 93de502] Primer commit, modelo corriendo 2 files changed, 14 insertions(+) create mode 100644 main.m create mode 100644 solution.m master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
bash master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash master $ git add -A |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash master $ git add -A master $ |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash master $ git add -A master $ git commit -m "Reporte |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"
bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" |

Ejemplo

  1. Queremos inicializar un repositorio en Desktop/project ✅
  2. Creamos dos archivos en matlab y ahora queremos generar nuestro primer commit ✅
  3. Creamos un reporte en TeX y modificamos un par de lineas en main.m . Agregamos al escenario y hacemos el segundo commit ✅
    1. Agregar los archivos al staging area usando git add
    2. git commit -m "mensaje"

Veamos cómo se ve nuestro árbol git !!

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ |

Ejemplo

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ |
f026d7e Commit inicial, modelo corriendo 93de502 Reporte V0 y edición menor a main.m HEAD Master

Branching

Una de las grandes ventajas de Git es que simplifica el uso de "ramas" o estructuras no lineales

Esto es muy útil para experimentar!

Ejemplo

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master

Ejemplo

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ git checkout -b |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master

Ejemplo

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ git checkout -b "opcionales" |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master

Ejemplo

bash master $ git add -A master $ git commit -m "Reporte V0 y edición menor a main.m" [master f026d7e] Reporte V0 y edición menor a main.m 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 Reporte.tex master $ git checkout -b "opcionales" Switched to a new branch 'opcionales' opcionales $ |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master Opcionales

Ejemplo

bash opcionales $
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master Opcionales

Ejemplo

bash opcionales $ git add -A opcionales $ |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master Opcionales

Ejemplo

bash opcionales $ git add -A opcionales $ git commit -m "Parámetros |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master Opcionales

Ejemplo

bash opcionales $ git add -A opcionales $ git commit -m "Parámetros alternativos" |
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 HEAD Master Opcionales

Ejemplo

bash opcionales $ git add -A opcionales $ git commit -m "Parámetros alternativos" [opcionales c787e04] Parámetros alternativos 1 file changed, 1 insertion(+), 1 deletion(-) opcionales $ | -->
  1. Ahora nos gustaría ver cómo los parametros afectan a nuestro modelo. Para ello creamos una nueva rama: Opcionales ✅
    1. Crear nueva rama y cambiarse a ella usando git checkout -b "nueva rama"
    2. Agregar y registrar los cambios: git add y git commit
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ | -->
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m

    Arreglarlo no es difícil

Ejemplo

bash opcionales $ | -->
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m

    Arreglarlo no es difícil

Ahora lo guardamos, pero los cambios no han sido registrados en git

Tenemos que definir en qué rama vamos a hacer el commit

Lo mas sano es arreglar el error en "master" . Esto es especialmente importante si hay mas gente trabajando en el proyecto.

Ejemplo

bash opcionales $ | -->
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.

Ejemplo

bash opcionales $ | -->
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master"
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ |
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ |
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en |
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en solution.m"
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master Opcionales HEAD c787e04

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en solution.m" [master f89dffb] Arregla error en solution.m 1 file changed, 1 insertion(+) master $ |
  1. Ohh No!!! 😱 Hay un error en el archivo solution.m ✅
    1. Arreglar el error y guardar. Cambiarnos a la rama "master"
    2. Hacer el staging del arreglo y hacer el commit.
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en solution.m" [master f89dffb] Arregla error en solution.m 1 file changed, 1 insertion(+) master $ |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en solution.m" [master f89dffb] Arregla error en solution.m 1 file changed, 1 insertion(+) master $ git checkout "opcionales" |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git checkout "master" M     solution.m Switched to branch 'master' master $ git add solution.m master $ git commit -m "Arregla error en solution.m" [master f89dffb] Arregla error en solution.m 1 file changed, 1 insertion(+) master $ git checkout "opcionales" Switched to branch 'opcionales' master $ |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git merge "master" -m |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo.
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ |
  1. Ahora volvemos a "Opcionales" e incorporamos el arreglo. ✅
    1. git checkout
    2. git merge
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ |
  1. Suponemos que lo que encontramos en "Opcionales" es interesante y hacemos el "merge" hacia "master".
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" |
  1. Suponemos que lo que encontramos en "Opcionales" es interesante y hacemos el "merge" hacia "master".
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" Switched to branch 'master' master $ |
  1. Suponemos que lo que encontramos en "Opcionales" es interesante y hacemos el "merge" hacia "master".
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" Switched to branch 'master' master $ git merge "opcionales" |
  1. Suponemos que lo que encontramos en "Opcionales" es interesante y hacemos el "merge" hacia "master".
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" Switched to branch 'master' master $ git merge "opcionales" Updating f89dffb..51e4f0b fast-forward (no commit created) main.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) master $ |
  1. Suponemos que lo que encontramos en "Opcionales" es interesante y hacemos el "merge" hacia "master".
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" Switched to branch 'master' master $ git merge "opcionales" Updating f89dffb..51e4f0b fast-forward (no commit created) main.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) master $ |
  1. Si no seguiremos explorando en "Opcionales", podemos eliminarla sin perder información
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

bash opcionales $ git merge "master" -m "merge master: fix solucion.m" Merge made by the 'recursive' strategy. solution.m | 1 + 1 file changed, 1 insertion(+) opcionales $ git checkout "master" Switched to branch 'master' master $ git merge "opcionales" Updating f89dffb..51e4f0b fast-forward (no commit created) main.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) master $ git branch -d "opcionales" Deleted branch opcionales (was 51e4f0b) |
  1. Si no seguiremos explorando en "Opcionales", podemos eliminarla sin perder información
f026d7e 93de502 Master HEAD Opcionales c787e04 f89dffb 51e4f0b

Ejemplo

preguntas?

Interfaces de usuario

  • Usar Git en la línea de comando puede ser incomodo.
  • Las interfaces de usuario facilitan el proceso, pero involucran preferencias personales.
  • UI's populares: Git Kraken y VS Code

Interfaces de usuario

Interfaces de usuario

Interfaces de usuario

Interfaces de usuario

preguntas?

Colaboración con Git

  • Anteriormente mencionamos que git no requiere servidores.
  • En teoría, podríamos compartir un repositorio utilizando un disco duro en común
  • También se pueden crear permisos de lectura y escritura (ver documentación de git init)
  • No obstante, un servidor git permite crear un espacio común y seguro!
  • Git ocupa los siguientes protocolos de comunicación:
    • Local
    • HTTP y HTTPS
    • SSH
    • GIT

Colaboración con Git

  • Para colaborar con git sólo nos hace falta aprender los siguentes comandos
    • git remote
    • git clone
    • git pull (git fetch + git commit)
    • git push

Sin embargo hay un componente humano que hace falta

Plataformas de colaboración (RR.SS.)

  • Tener la información no es lo mismo que entender la información
  • Las "redes sociales" en torno a Git permiten dar fluidez a la comunicación y generar estructuras de colaboración y dominio de código.
    • Tipos de colaboradores (e.g. dueño, desarrollador, observador)
    • Archivos Readme y Wiki
    • Issues
    • Forks
    • Pull/Merge requests
  • Las mas utilizadas son GitHub, GitLab y BitBucket.

GitLab: una red social Git

GitLab: readme.md

GitLab: issues

GitLab: boards

GitLab: milestones

GitLab: grupos

GitLab: permisos

preguntas?

Comentarios finales

  • Git es un secretario que lleva registro completo de nuestro trabajo.
  • Es cada dia mas popular... incluso entre economistas. (replicabilidad y colaboración)
  • Git no es mágico. Requiere que los equipos definan estrategias para crear ramas y resolver conflictos.
  • Las GUI's ayudan a humanizar git. Hacen la organización del cambio manejable.
  • Las RR.SS. son herraminetas de colaboración y comunicación muy poderosas. Patio Inglés digital + información no sincrónica

Comentarios finales

  • El uso del ecosistema Git permite ampliar el set de herramientas comunicacionales internas.
  • Al simplificar la gestión del cambio permite acceder a nuevas tecnologías.
  • No todas esas tecnologías son "machine learning" y "big data".
    • Aplicaciones web
    • Dashboards
    • Sitios estáticos

TODO: El acelerador financiero

Pequeña aplicación web usando Python

preguntas?

Git para economistas

Introducción a sistemas de control de versión

Nicolás Franz-Pattillo