2. Práctica de operaciones locales

Se asume que se tiene instalado git. Este se utiliza mediante comandos en la CLI.

En una instalación nueva de git el usuario no esta definido, por lo que es necesario identificarlo. Para establecer el nombre de autor:

$git config --global user.name 'minombre'

Para establecer el correo del autor:

$git config --global user.email 'mi@correo.com'

Una vez establecidos estos datos de usuario, se esta en condiciones para realizar operaciones locales.

Para crear un repositorio en el directorio actual:

$git init

Cree un archivo. Puede ser un archivo de texto. Para este ejemplo se utilizará el nombre file1.txt. Para indicarle al sistema git que se quiere archivar una versión del proyecto, primero deben copiarse todos los archivos que se desean versionar al area de staging. Para hacer esto:

$git add file1.txt

Alternativamente, se pueden agregar todos los archivos en el directorio actual de manera recursiva con:

$git add .

Ahora los archivos estan en el area de staging. Para crear el commit:

$git commit

El entorno abre un editor de texto en donde se pide introducir el mensaje que acompañará al commit. El editor por defecto es vi. Es posible especificar el mensaje en el mismo comando con la opcion -m:

$git commit -m "mensaje"

Se puede obtener información del estado del repositorio con

$git status

La salida del comando indica si hay modificaciones que no se han copiado al área de staging o cambios en el área de staging que no se han archivado. Si indica que el árbol de trabajo esta limpio, significa que el espacio de trabajo es igual que el ultimo commit realizado.

Importante: si no se agregan los archivos modificados al área de staging con $git add, estos no se archivan al hacer $git commit. Antes de hacer $git commit, siempre se deben agregar los archivos modificados al área de staging.

Propuesta:

Cree el archivo file2.txt, agréguelo al área de staging y cree un commit. Repita los pasos para un archivo file3.txt.

Si ha seguido los pasos hasta aquí, tendrá 3 archivos en su directorio. El comando:

$git log

lista los commits realizados hasta el momento. Se muestra el id, el autor y la fecha de cada commit. Deberían aparecer 3 commits distintos.

Copie el id del primer commit (no es necesario copiar los 40 caracteres, basta con los primeros 7) y úselo como argumento del comando:

$git checkout id-primer-commit

El sistema avisa que el puntero HEAD apunta ahora al primer commit y esta en modo detached. Si observa el directorio de trabajo, solo debería estar el archivo file1.txt.

El comando $git checkout sirve para direccionar el puntero HEAD.

Si se hace $git log, solo se muestra el primer commit.

Para volver al ultimo commit, hacemos que HEAD vuelva a apuntar a master. Recuerde que los punteros de las ramas siempre apuntan al commit mas reciente:

$git checkout master

El área de trabajo debería mostrar nuevamente 3 archivos, ya que estamos en la versión mas reciente.

El comando:

$git branch

lista las ramas existentes. En este caso, solo existe la rama 'master'. Un asterisco al lado de master indica que HEAD esta apuntando a esta rama.

Para crear una rama nueva: (en este ejemplo se le llamará 'dev'):

$git branch dev

Se puede comprobar que se ha creado utilizando el comando $git branch. Para trabajar en la rama recien creada se redirecciona el puntero head:

$git checkout dev

Los últimos 2 comandos ($git branch dev y $git checkout dev) pueden ser resumidos por:

$git checkout -b dev

Propuesta:

En la rama 'dev', cree el archivo file4.txt, agreguelo al area de staging y cree un commit. Repita para el archivo file5.txt.

Se deberían tener 5 archivos y 5 commits en el log.

Propuesta:

Regrese a la rama 'master'. ¿Cuantos archivos hay en el área de trabajo? Cree el archivo file6.txt, agreguelo al area de staging y cree un commit. Repita para el archivo file7.txt.

Se deberían tener 5 archivos y 5 commits en el log.

En master se tienen los archivos file1.txt, file2.txt, file3.txt, file6.txt y file7.txt. Para "traer" los archivos file4.txt y file5.txt que fueron creados en la rama 'dev' se puede hacer una operacion merge. Estando en 'master':

$git merge dev -m "mensaje de merge"

Al hacer $git log se comprueba que se han agregado los commits que se habían realizado en la rama 'dev' en la rama 'master'. El orden en que se agregan los commits es cronológico, según la fecha de creación. Ademas, la operación merge agrega un nuevo commit con el mensaje provisto. Los archivos que se habían creado en la rama 'dev' deberían aparecer en el area de trabajo.