Bienvenidos a un nuevo capítulo de Git desde cero en este curso hablaremos sobre como realizar “debugging” utilizando Git, con las herramientas git bisect
y git blame
. Los comandos a utilizar esta semana serán los siguientes:
- git blame * (varios comandos)
- git bisect * (varios comandos)
¿Realizar “debugging” en git?
Muchas veces en nuestros proyectos y de manera involuntaria, introducimos errores en el código fuente. Existen herramientas que nos ayudan a resolver, a cubrir y darnos cuenta de los defectos que hemos introducido de forma “inmediata” sobre todo cuando se programa de manera orientada a pruebas, mayormente conocida como TDD (Test Driven Development). Con todo y estas “ayudas” para asegurarnos de que nuestras funciones realizan lo que queremos; muchas veces entre una versión y otra el comportamiento de una función cambia ligeramente y nuestra unidad de pruebas no lo detecta. Cómo confiamos plenamente en ella realizamos un “commit” de nuestro código y lo subimos al repositorio remoto. Seguimos programando y subimos otros más. De repente nuestros usuarios comienzan a levantar “tickets” a cerca de un error recurrente; cuando revisamos el código fuente para detectar porqué se produce este error, no detectamos a simple vista que es lo que sucede. En este punto recurrimos a el control de versiones para ir a versiones anteriores y ver que hemos cambiado en estos últimos “commits”. Canalizamos la falla a un archivo, y utilizamos nuestras herramientas git blame
ygit bisect
las cuales nos ayudarán a detectar, cuando se introdujo el error y que lo motiva.
¿Qué realiza el git blame?
El comando git blame
nos permite observar toda la información de manera detallada a cerca de un “commit”. Entre la información que nos brinda el comando está: Quién escribió cada linea en el archivo, cuando lo hizo y a que “commit”pertenece. La palabra “blame” en idioma Inglés es referente a “quien echarle la culpa” o “quien es el culpable” según sea su contexto. Por este motivo llaman a este comando de esta forma.
Vamos a verlo en acción.
1234567891011 $git blame appjsc4c4f2a2(Jonathan Wiesel 2013-09-0222:38:34-0430 6)vardotenv=require('dotenv')();c4c4f2a2(Jonathan Wiesel 2013-09-0222:38:34-0430 7)dotenvload();c4c4f2a2(Jonathan Wiesel 2013-09-0222:38:34-0430 8)ae36bb76(Oscar Vicente González Greco2013-08-2514:05:52-0430 9)varexpress=require('express')ae36bb76(Oscar Vicente González Greco2013-08-2514:05:52-043010), http =require('http')ae36bb76(Oscar Vicente González Greco2013-08-2514:05:52-043011), path =require('path')c4c4f2a2(Jonathan Wiesel 2013-09-0222:38:34-043012), db =require('./dbConfig')98b032f9(Oscar Vicente González Greco2013-08-2918:14:19-043013), auth=require('./passportConfig')98b032f9(Oscar Vicente González Greco2013-08-2918:14:19-043014), flash=require("connect-flash");ae36bb76(Oscar Vicente González Greco2013-08-2514:05:52-043015)
Podemos apreciar que lo primero que nos muestra es el “hash” corto, único del “commit”, luego encontramos el nombre de usuario que realizó, la fecha, y la respectiva línea de código.