Revista Informática

Git desde Cero: Blame y Bisect

Publicado el 05 septiembre 2013 por Codehero @codeheroblog

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.


Volver a la Portada de Logo Paperblog