Chapter 4 ¿Historial de cambios en documentos pero en codigo? Git + un cuento
4.1 Introduccion
Bueno para comenzar, como instalar git y configurarlo no es tan complicado en windows o linux, la pagina oficial de git lo indica tambien.
Una vez instalado y configurado arrancamos.
4.2 Un breve cuento con Git ¿Control de versiones?
Imagina que un amigo te pide ayuda para que le hagas su tarea en la escuela. Esta es enviarle a su profesora 2 poemas, de diferente clase, uno al ser estudiante molinero se sabe muchas coplas, asi que el trato es, te ayudo con una copla y tu escribes el restante, tu amigo acepta.
En la historia hay un pequeño detalle, tienen menos de 10 minutos para enviarlo y aparte, para mala suerte de nuestro amigo, todo su pack de microsft office no le funciona, a su vez whatsapp, facebook y gmail estan caidos, su intranet del colegio tiene una validacion de doble factor y uno no puede entrar con su cuenta y contraseña ni a subir la tarea. Pero como somos buenos usuarios de git y curiosamente hace unas semanas para unos temas instalamos git en la computadora de nuestro amigo y la configuramos con una cuenta distinta a la nuestra, resulta que esta es nuestra salvación.
Recordando lo que hicimos ese dia en la laptop de nuestro amigo, tenemos que creamos un repositorio, es decir hicimos de una carpeta, un entorno donde git conoce que los archivos que vayamos agregando a esta carpeta forman parte de algo mas grande que solo tenerlas en el entorno local de la computador de nuestro amigo.
Este entorno local se conoce como working directory, y para crear esta referencia a git hicimos esto git init
en terminal, diciento que hemos inicializado el repositorio.
Luego configuramos el correo de nuestro amigo para asegurarnos de esta conexion con git config --global user.email 'amigo@email.com'
en terminal.
En la misma carpeta le dimos click derecho y creamos un docuemtno de texto vacio, lo llamamos archivo1.txt, sin saber lo que el futuro tendria guardado para este archivo.
Posterior a esto, le indicamos a nuestro amigo que le diga a git que agregue un nuevo archivo, para esto en terminal escribimos git status
, esto nos arroja un mensaje diciento que el archivo archivo1.txt no ha sido rastreado o algo como untracked. Esto se traduce en que git detecta un archivo nuevo pero que no forma parte del staging area, que es un almacenamiento temporal de git para este seguimiento de nuestros archivos.
Lo agregamos a nuestro staging area de manera rapida y sencilla con git add .
, el add de agregar y el puntito todos los archivos agregados.
Ahora es bueno saber que estamos agragando cada vez que hacemos este git add .
, por lo que escribimos un mensaje indicando que tenemos en cada cambio con git commit -m "mensaje que queremos compartir"
, aca se muestra a la luz el concepto de commit, lo que hace es crear un identificador de cada cambio realizado, es nuestra nueva version de repositorio que aun vive en nuestra computadora local.
Ahora nuestro amigo solo tiene esto en su computadora, para mandarlo a un repositorio en la nube y en donde sea y quien sea con los permisos necesarios pueda contribuir con este repositorio, hacemos git push origin master
.
Con esto cobra vida nuestro repositorio en internet.
Ahora con todos estos flashbacks, vamos a terminar nuestra historia.
Temporalmente estamos a 10 minutos previos de la presentacion de la tarea de nuestro amigo, nosotros escribiremos la copla el un poema, para esto necesitamos tener un medio de trabajo en comun, donde tanto yo como el podamos hacer cosas conjuntamente. Entonces, lo que hacemos es ir al servicio de git en la nube donde se encuentre nuestro repositorio, probablemente sea github el mas famoso o bitbucket o gitlab, pero bueno, todos estos en la pestaña donde este nuestro repo, tienen una opcion de clonar, recordemos que la carpeta y el archivo archivo1.txt estan en la computadora local de nuestro amigo(git add y git commit
) y en la nube (git push origin master
), pero no en nuestra computadora,
para esto repito, debemos clonar este repositorio, traerlo fisicamente a nuestra computadora, como una carpeta visible con el unico archivo que tenemos. Esto se consigue abriendo la terminal y copiando el link que encontramos previamente.
Y wuala, esta en nuestra computadora, abrimos el archivo txt, y escribimos nuestra copla recordando lo que nos dijo una bella dama en la universidad:
- Cuando pasas por mi lado y me tiras un besito, hasta los huesos me tiemblan de verte tan bonito.
Estamos felices de contribuir pero el trabajo es en conjunto, por lo que debemos subirlo a la nube, probablemente si no tenias la respuesta en tu mente no te preocupes, pero debemos hacer.
git status
ver los archivos que hemos modificado (aparecera en rojo).git add .
para agregarlos y poder hacer un futuro commit.git commit -m "Copla molinera"
agregamos nuestro comentario del cambio.git push origin master
lo mandamos a la nube.
Nuestro amigo podra ver nuestros cambios en la nube, pero no en su computadora, por lo que el para actualizar a la ultima version del repositorio, que es la que tiene nuestra copla lo siguiente:
git pull origin master
, esto es traerse al entorno local lo que esta en la nube, en este caso, el utlimo cambio.
Por ultimo para cerrar nuestra historio nuestro amigo escribe su poema en el archivo txt, subiendo este ultimo a su intranet y presentando su tarea.
Como recuerdo sus cambios los sube a la nube, siguiendo los pasos anteriores que hicimos para subir nuestra copla y listo, fin del cuento.
Ojo aun no hablamos de que es origin master y del concepto de ramas, pero lo haremos dentro de poco.
4.3 Apuntes git Codigo …
git add .
: agregamos todo, el mas recomendado de usar.git add -am "Mensaje commmit"
: Estamos agregando y commiteando. Esto solo funciona para archivos que previamente ya tuvieron un add.git add nombre_archivo
: solo agregamos el archivo con un nombre en especifico.git rm nombre_archivo_anterior
: lo hemos quitado pero del entorno de git.git rm --cached nombre_archivo_anterior
: lo hemos borrado de la memoria ram (staging area). hemos regresado a el estado inicial del cambio de nuestro archivo (sin elgit add nombre_archivo
).git rm --force nombre_archivo_anterior
: eliminamos el archivo del historial de git y del disco duro.git config --list
: configuraciones en el sistema.git config --list --show-origin
: donde estan guardadas las configuraciones.git log
: toda la historia del repositorio.git log nombre_archivo
: toda la historia de commits del archivo.git log --stat
: cambios especificos en que archivos se hicieron.git show nombre_archivo
: nos muestra las diferencias entre versiones del archivo.git diff id_commit_a id_commit_b
: el id del commit es el numero largo compuesto por numeros y letras que identifica el commit, con git diff podemos comparar cualquier par de commmits en la historia, no solo el actual con el anterior como con git show.git reset id_commit --hard
: todos los archivos vuelven al estado anterior, estamos regresando en el tiempo, pero no podemos volver al futuro.git reset id_commit --soft
: volvemos a la version anterior, pero lo que esta en el staging area, continua ahi.git reset HEAD
: elimina los archivos del staging area, esto es si has hecho un commit, lo estas borrando solo de la historia de git.git checkout id_commit_regreso nombre_archivo
: solo nos cambia el archivo en especifico a la version del id_commit que estamos llamando, si agregamos un commit aca, esto hara que si, en el archivo que tenemos hemos realizado cambios, estos se perderan porque estamos en viendo una version anterior, para regresar solo tenemos que hacergit checkout master nombre_archivo