Git bisect: ¿Cómo identificar un error en su código?



En este artículo sobre git bisect, aprenda cómo el comando 'git bisect' ayuda a detectar la primera confirmación incorrecta que introduce un error mediante el algoritmo de búsqueda binaria.

Mi código funcionaba bien hasta ayer, pero no hasta que una extracción reciente del repositorio remoto rompió el código.

Si se encuentra en una situación similar y no sabe qué cambio rompió el código o OMS de muchos contribuyentes posee esta error / característica , entonces git bisect es tu salida. Entonces, en este artículo sobre git bisect, aprenderá cómo el 'git bisect'El comando viene a Rescue en la detección de la primera confirmación incorrecta que introduce el error utilizando el algoritmo de búsqueda binaria.

Los temas cubiertos en este artículo son los siguientes:





¿Por qué usar git bisect?

No hay duda en el hecho de que tiende a crear una serie de confirmaciones por cada cambio menor en . En tal escenario, depurar el código se convierte en una tarea tediosa, ya que tiene que retroceder manualmente en el tiempo a cada revisión de la instantánea del proyecto para probar el código de trabajo y detectar el error. Ahora, esto se pone aún más complejo cuando se tiene que inspeccionar el trabajo de otros sin un punto de referencia, tampoco parece muy factible pedir a cada uno que corrija sus propios errores.
En el camino, también puede crear y descartar una serie de ramas de 'características' (o hotfix) en el proceso y terminar perdiendo tiempo y esfuerzo mientras se desvía de la línea principal de desarrollo.



Entonces, para evitar tales escenarios, puede usar elgit bisectcomando para encontrar la revisión del proyecto defectuoso (o instantánea) y eventualmente arreglarlo con elgit revertmando.

¿Cómo busca 'git bisect'?



Este comando biseca (divide) tu historial entre los bueno y el malo cometer rango. Apunta tu Actual proyecto estado a un rango medio cometer instantánea. El comando git bisect luego se mueve a través de cada id de confirmación entre este rango mientras pausar en cada instantánea para permitirle prueba el código . Si el error existe, declara la confirmación como malo, si no como bueno a menos que termine la búsqueda.

Sintaxis

git bisect

Para comprender mejor git bisect, creemos un proyecto que desarrolle el código para una aplicación de navegación simple que se usará en un automóvil.

Configuración inicial del proyecto

Para crear un proyecto que desarrolle el código para una aplicación de navegación simple que se usará en un automóvil, puede seguir los pasos a continuación:

Paso 1: Cree un nuevo directorio en su carpeta $ HOME:

cd $ HOME mkdir my_nav_app

Paso 2: Navegue al nuevo directorio:

cd $ my_nav_app

Paso 3: Clona para descargar el proyecto desde mi página de GitHub:

clon de git https://github.com/divyabhushan/my_nav_app.git

Ahora, entendamos el diseño de los directorios y archivos del proyecto, tal como lo imprime el comando:ls -lTR

Diseño del código fuente - Git Bisect - Edureka

A continuación, veamos el diario del historial del proyecto para ver las confirmaciones que hice para generar este código.

Por ejemplo, un simple comando git log imprime el historial en detalle, sin embargo, me gusta formatear y personalizar el historial. Por lo tanto, déjanos establecer un nombre de alias: 'hist' utilizando la alias de git comando como se muestra a continuación:

git alias.hist 'log --pretty = formato:'% C (amarillo)% h% Creset% ad | % C (verde)% s% Creset% C (rojo)% d% Creset% C (azul) [% an] '--graph --decorate --date = short'

Ahora, voy a llevar a cabo esta función de corrección de errores en una rama separada, para no interferir con el desarrollo principal en la rama 'maestra'. Para hacer eso, siga el siguiente conjunto de comandos:

  • Cree la rama 'dev': [maestro] $git branch dev
  • Cambie a la rama 'dev': $dev de git checkout
  • Enumere los registros del historial: [dev] $ir hist[Nota: aquí se utiliza el comando 'alias']

Además, he resaltado la última confirmación buena conocida que sé en la que mi script funcionó bien con los resultados esperados del caso de prueba, esta instantánea de confirmación es etiquetado como v1.0.

Entonces, ahora que conocemos nuestro último compromiso bueno, avancemos en este artículo sobre 'git bisect' y probemos la aplicación.

Prueba la aplicación

Ejecute el script como - $./scripts/myApplication.sh[prueba por primera vez]



Claramente, el estado de mi proyecto actual está en error , y no estoy seguro de qué cambio hice en el compromiso que introdujo este cambio. Entonces, a continuación en este artículo sobre git bisect, veamos cómo identificar la mala confirmación.

Identificación del mal compromiso

Para comenzar a inspeccionar el compromiso incorrecto, debe seguir los pasos a continuación:

  • Inicie el comando bisect :inicio de git bisect
  • Mencione el ID de compromiso incorrecto: git bisect bad HEADogit bisect c5b3ca8
  • Mencione el último id de compromiso bueno conocido: git bisect bueno v1.0ogit bisect 93859d8

Esto divide el rango del historial de confirmaciones aproximadamente a medio camino entre las confirmaciones buenas y malas que nos lleva al ID de confirmación: f61a7e8

mejor java ide para ubuntu

Por lo tanto, el comando ha verificado la versión del proyecto tal como estaba en este ID de confirmación. Ahora, sigamos adelante y probemos nuestra aplicación nuevamente.

Comando para ejecutar la aplicación : $./scripts/myApplication.sh[probando por segunda vez]


Desde la aplicación pasado en este compromiso, este compromiso ciertamente no es el compromiso incorrecto. Entonces, a continuación, debe informar lo mismo al comando bisect como - $git bisect bueno


Ahora, esto reducirá aún más el resultado de la búsqueda en la primera mitad del rango como se muestra:


Pruebe su aplicación nuevamente - Comando: $./scripts/myApplication.sh[prueba por tercera vez]


Entonces, dado que vemos un error como el anterior, esta es una mala confirmación.

Hágale saber al comando bisect, ejecute $git bisect mal


Eso reduce aún más la búsqueda y lo lleva a la última revisión intermedia rodeada de azul: a6ac769

Entonces, pruebo mi aplicación una última vez usando el mismo comando: $./scripts/myApplication.sh[prueba por cuarta vez]

Ahora, dado que la aplicación falló nuevamente, sigue siendo una mala confirmación. Entonces, ejecutemos el siguiente comando:

diferencia entre posgrado y maestría

Ejecute el comando: git bisect mal

Se encontró una mala confirmación

Esto concluye el único último compromiso que queda que es malo.


Entonces sabes que aquí es donde se rompió el código. ¿Qué sigue?

Entender qué archivo tenía el error

En este caso, la salida le brinda información mínima sobre el confirmar id , nombre del autor , y el fecha de autor junto con cometer mensaje y el camino que fue modificado.

Si desea depurar más, debe leer la cometer id de objeto .

Mando: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Esto leerá el objeto de confirmación e imprimirá el mensaje de registro y la diferencia textual.

También podría usar el comando 'git blame' para analizar cómo y en qué confirmación cada línea fue cambiada por qué autor, ejecute el comando como:código de culpa de git / development_nav.sh

Detén la búsqueda

Para detener la búsqueda, use el siguiente comando:

Mando: git bisect restablecer


Por lo tanto, el proceso de bisección se detiene y vuelve a la rama desde la que inició la búsqueda. Ahora, el siguiente paso es corregir o depurar el código.

¿Cómo arreglar / depurar el código?

Bueno, hay un par de soluciones que podría hacer para corregir el estado actual del proyecto ahora que ha identificado la confirmación que provocó el error en primer lugar.
Sin embargo, si está modificando una confirmación en un repositorio compartido Es mejor revertir el cambio usando el ' git revert 'Comando.

Tarea: Revertir los cambios realizados por la mala confirmación mencionada

Mando: git revert a6ac769

Como resultado, revertir los cambios realizados por esta confirmación hizo 2 cosas:

  • Eliminó las últimas 3 líneas agregadas (indicadas en verde) y agregó la línea eliminada (indicada en rojo) nuevamente. (reverso de a6ac769)
  • Se creó una confirmación adicional con la información del mensaje de reversión.

'El comando Revertir también facilita el seguimiento del cambio que revertiste de la confirmación original'

Utilizar el 'show' comando de nuevo para leer la identificación del objeto, así-

Mando: git show 801f029

Ahora, avance y pruebe la aplicación. Se ejecutará correctamente.

Mando: $./scripts/myApplication.sh

Por el contrario, si desea eliminar la mala confirmación del historial:

  • Podrías usar el ' git reset 'Comando con el'--difícil”(Aunque no se recomienda en un repositorio compartido).

  • Consulte una versión anterior de un solo archivo con el 'git checkout'Comando con el'--' opción.

Cabe señalar que esto solo hará cambios en su repositorio local hasta que envíe los cambios a un repositorio remoto. Dado que algunos cambios crean un nuevo ID de objeto de confirmación, como en nuestro caso anterior, en tales casos se rechaza un envío normal al repositorio remoto ya que el historial habría divergido. Debe utilizar el ' git push 'Comando con el'--fuerza' opción.

Actualizar la rama 'maestra'

Aunque arreglé el error en mi rama 'dev', ahora puedo fusionar este cambio con la rama 'maestra' también-

  • cambiar a 'maestro', comando:maestro de git checkout
  • extraer actualizaciones recientes de 'origen / maestro' a 'maestro', comando:origen de git pull
  • fusionar los cambios de 'dev', comando:git fusionar gigante

Sin embargo, su combinación puede generar conflictos si hay más confirmaciones desde el repositorio remoto. Resuelva los conflictos y continúe con la fusión.
Finalmente, envíe solo las confirmaciones de la rama 'maestra' estable al repositorio remoto mientras realiza el trabajo sucio (error, características, mejoras) solo en las ramas de características como 'dev' en este ejemplo.
Además, es mejor adoptar una lógica estrategia de ramificación para optimizar y asegurar su proceso de flujo de trabajo de git.

En resumen, 'git bisect' es un comando útil y útil que rápidamente identificar la confirmar id ese introducido a culpa en su código de ejecución con la ayuda de un extenso búsqueda binaria por lógicamente divisor los registros de compromiso a medio camino entre el bueno y malo cometer rango . Para concluir, aprendiste a detectar el compromiso defectuoso y revertir el cambio hecho por él.

Además, para los subcomandos 'bueno' y 'malo', también puede utilizar términos como nuevo y antiguo para describir el estado de revisión. Puede ejecutar el comando varias veces pasando diferentes subcomandos e ID de revisión / confirmación para identificar diferentes ID de confirmación (she-1). Alternativamente, también se puede ejecutar un script de prueba automatizado para construir el código roto usando este comando. Además, busque una descripción detallada de este comando ejecutandogit bisect --ayudaen la terminal. Entonces, amigos con esto, llegamos al final de este artículo sobre Git Bisect.

La intención de DevOps es crear software de mejor calidad de forma más rápida y con más confiabilidad, al tiempo que invita a una mayor comunicación y colaboración entre equipos. Si está intrigado por este artículo, c diablos el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso Edureka DevOps Certification Training ayuda a los alumnos a comprender qué es DevOps y a adquirir experiencia en varios procesos y herramientas de DevOps, como Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack y GIT para automatizar varios pasos en SDLC.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios del artículo 'Git Bisect' y nos comunicaremos con usted lo antes posible.