leccion-07-git

El sistema Git para control de versiones

Recursos de interés

Características generales de Git

Git es un sistema de control de versiones diseñado para rastrear cambios en el código fuente durante el proceso de desarrollo de software. Sin embargo, puede ser utilizado para llevar el control de los cambios en cualquier conjunto de archivos (ej. documentación, música). Un sistema de control de versiones proporciona, entre otras ventajas:

Git fue desarrollado por Linus Torvalds en 2005 durante del desarrollo del kernel del sistema operativo Linux. Se caracteriza por ser un sistema de control de versiones distribuido, lo que significa que el código fuente puede estar alojado en la estación de trabajo de cualquier miembro del equipo de desarrollo (i.e. no hay un repositorio “central”). Es un proyecto de software libre que se comparte mediante una licencia GNU General Public Licence (GNU GPL).

El protocolo de Git es utilizado en varios sitios que proveen servicios de alojamiento de software, entre los que están SourceForge, Bitbucket, GitLab y GitHub.

¿Cómo funciona Git?

Desde el punto de vista de un usuario de Git (ej. un programador), Git se utiliza para sincronizar la versión local de un conjunto de archivos, llamado proyecto o repositorio, con la versión que está alojada en un sistema remoto (ej. GitHub). Cada repositorio se almacena en un directorio (carpeta) del sistema operativo. La sincronización se realiza principalmente a través de dos operaciones:

Las operaciones push y pull se ilustran en la figura 1:

Figura 1: Operaciones _push_ y _pull_. Imagen de Melinda Higgins (https://www.coursera.org/learn/reproducible-templates-analysis/lecture/NGbQv/git-and-github-part-1)

Figura 1: Operaciones push y pull. Imagen de Melinda Higgins (https://www.coursera.org/learn/reproducible-templates-analysis/lecture/NGbQv/git-and-github-part-1)

Antes de un push, el usuario debe seleccionar los archivos que desea subir mediante el comando git add, el cual pasa los archivos a un “área de espera” (staging area). Luego debe usarse el comando git commit para “guardar” los cambios en el área de espera.

La relación entre estas operaciones de Git, se ilustra en la figura 2:

Figura 2: Operaciones de Git. Imagen de Steven Klavins (https://medium.com/@stevenklavins94/version-control-part-4-c9387cf5b33e)

Figura 2: Operaciones de Git. Imagen de Steven Klavins (https://medium.com/@stevenklavins94/version-control-part-4-c9387cf5b33e)

En la figura 3 se muestra la función de algunos de los comandos de Git mediante una comparación con el procesamiento de una compra en línea:

Figura 3: Operaciones de Git y compras en línea. Imagen de Melinda Higgins (https://www.coursera.org/learn/reproducible-templates-analysis/lecture/NGbQv/git-and-github-part-2)

Figura 3: Operaciones de Git y compras en línea. Imagen de Melinda Higgins (https://www.coursera.org/learn/reproducible-templates-analysis/lecture/NGbQv/git-and-github-part-2)

Otros comandos de Git de uso frecuente son:

Ejemplos de uso

Clonación de un repositorio remoto y “push” de los cambios efectuados localmente

En este ejemplo de flujo de trabajo, se clonará un repositorio remoto en la computadora local, se realizarán cambios en uno de sus archivos y se “subirán” de vuelta al repositorio remoto mediante la operación push de Git.

Para seguir este ejemplo, bifurque (fork) a su cuenta en GitHub el repositorio localizado en la dirección https://github.com/tpb708-programacionsig-2020/tutorial-git-repo-ejemplo. Luego, ejecute los siguientes comandos desde la terminal del sistema operativo o desde alguna interfaz que incluya las herramientas de Git, como la línea de comandos (prompt) de Anaconda:

# 0. Posiciónese en el directorio en el que va a residir el repositorio clonado.
# Por ejemplo, el directorio del usuario.
cd C:\Users\mfvargas

# 1. Especifique del nombre y de la dirección de correo del usuario.
# Debe modificar la dirección de correo y el nombre del usuario con sus propios datos en los siguientes comandos.
git config --global user.email "usuario@correo.com"
git config --global user.name "Nombre de usuario"
# Para revisar:
git config --global --list

# 2. Clone el repositorio remoto a la estación de trabajo local.
# Debe sustituir "usuario" por su nombre de usuario en GitHub.
git clone https://github.com/usuario/tutorial-git-repo-ejemplo.git

# 3. Cámbiese al directorio del repositorio recién clonado.
cd tutorial-git-repo-ejemplo

# 4. En este punto, realice algunas modificaciones en el archivo README.md del repositorio recién clonado (ej. agregue una nueva línea).

# 5. Revise los archivos que han sido modificados.
git status

# 6. Agregue los archivos modificados al "área de espera".
# El punto (.) indica que se agregarán todos los archivos modificados.
git add .

# 7. Almacene (commit) el conjunto de archivos modificados, junto con un mensaje explicativo.
git commit -m "Agregar línea 2"

# 8. "Suba" (push) las modificaciones al repositorio remoto.
git push

Si se realizan nuevos cambios, deben repetirse los pasos del 5 al 8.