Ilustración de git branch

GitK

Volver a la lista

Gitk es un navegador de repositorio gráfico. Fue el primero de este tipo. Se puede considerar como un contenedor de GUI para git log. Es muy práctico para explorar y visualizar el historial de un repositorio. Está escrito en tcl/tk, lo que lo hace trasladable entre distintos sistemas operativos. Paul Mackerras mantiene Gitk como un proyecto independiente, por separado del núcleo de Git. Dentro de la suite de Git se distribuyen versiones estables para la comodidad de los usuarios finales. Gitk puede ser práctico para el aprendizaje de los nuevos usuarios de Git.

Descripción general de Gitk

Gitk puede ser una práctica herramienta de aprendizaje para los usuarios nuevos en el control de versiones o para aquellos que están en transición desde otro sistema de control de versiones, como Subversion. Gitk es una utilidad que contiene el núcleo de Git. Proporciona una interfaz gráfica de usuario que ayuda a visualizar la mecánica interna de Git. Otras GUI populares para Git son git-gui y Sourcetree, esta última de Atlassian.

Uso

Gitk se invoca de manera similar a git log. Al ejecutar el comando gitk se lanzará la interfaz de usuario de Gitk, que tendrá un aspecto similar a este:

El panel superior izquierdo muestra las confirmaciones en el repositorio (la última, arriba). En la parte inferior derecha se muestra la lista de archivos afectados por la confirmación seleccionada. El panel inferior izquierdo muestra los detalles de la confirmación y la comparación de diferencias completa. Al hacer clic en un archivo en el panel inferior derecho, la comparación de diferencias del panel inferior izquierdo se centra en la sección correspondiente.

Gitk mostrará el estado actual del repositorio. Si el estado del repositorio se modifica con la línea de comandos por separado (por ejemplo, un cambio de ramas), será necesario volver a cargar Gitk. Gitk se puede volver a cargar en el menú File (Archivo) -> Reload (Volver a cargar).

Por defecto, Gitk renderiza el historial actual de confirmaciones. Gitk tiene diversas opciones de línea de comandos que se pueden pasar en la inicialización. Estas opciones restringen principalmente la lista de confirmaciones renderizadas en la vista de nivel superior de Gitk. La forma general de ejecución con estas opciones de revisión es la siguiente:

Opciones

    gitk [<options>] [<revision range>] [--] [<path>…]

    <revision range>

Se puede pasar un rango de revisión con el formato ".." para mostrar todas las revisiones entre y . También se puede pasar una sola revisión.

    <path>…

Limita las confirmaciones a una ruta de archivo específica. Para aislar las rutas de los nombres de revisión, separa las rutas de cualquier opción anterior con "--".

--all

Muestra todas las ramas, etiquetas y referencias.

--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]

Muestra el elemento seleccionado (ramas, etiquetas, remotos) como si fueran confirmaciones de línea principal. Cuando se pasa , se limitan aún más las referencias a las que coinciden con el patrón especificado.

    --since=<date>

Renderiza las confirmaciones que son más recientes que la fecha especificada.

    --until=<date>

Renderiza las confirmaciones que son anteriores a la fecha especificada.

    --date-order

Ordena las confirmaciones por fecha.

    --merge

Muestra las confirmaciones que modifican archivos en conflicto que se identificaron durante una fusión.

    --left-right

Renderiza etiquetas informativas que indican de qué lado de una comparación de diferencias proceden las confirmaciones. Las confirmaciones de la izquierda tienen el símbolo < y las de la derecha, el símbolo >.

    --ancestry-path

Cuando se tiene un rango de confirmaciones para mostrar (por ejemplo, commit1..commit2 o commit2 commit1), solo se muestran las confirmaciones que existen directamente en la cadena de antecesoras entre commit1 y commit2, es decir, confirmaciones que son descendientes de commit1, y antecesoras de commit2. Para ver una explicación más detallada, consulta "History simplification" (Simplificación del historial) en git-log(1).

L<start>,<end>:<file>

Son opciones eficaces para rastrear el historial de un rango de números de línea de código determinado.

Reflexión y ejemplos

Para proporcionar una salida utilizable, Gitk necesita un repositorio subyacente con un historial confirmado. El siguiente código es una secuencia de comandos bash que creará un nuevo repositorio con dos ramas que tienen confirmaciones y se han fusionado en una sola.

    mkdir gitkdemo &&
    cd gitkdemo &&
    git init . &&
    echo "hello world" > index.txt &&
    git add index.txt &&
    git commit -m "added index.txt with hello world content"

Este repositorio de demostración será un buen ejemplo que explorar con Gitk. Esta secuencia de comandos crea un nuevo repositorio con una confirmación y un archivo index.txt. Ahora vamos a invocar gitk para examinar el repositorio.

¿Gitk puede comparar dos confirmaciones?

Continuando con nuestro repositorio de demostración, vamos a crear una confirmación adicional:

    echo "prpended content to index" >> index.txt &&
    git commit -am "prepended content to index"

Una vez que se ejecuten los comandos siguientes, será necesario volver a cargar gitk. Vuelve a cargar gitk desde la línea de comandos o desplázate hasta File -> Reload con la interfaz gráfica de usuario (GUI). Una vez hecha la recarga, deberíamos ver las nuevas confirmaciones.

Podemos ver que la referencia de la rama main ahora apunta a la nueva confirmación. Para comparar estas dos confirmaciones, usamos el panel de historial superior izquierdo. Dentro del panel de historial, haz clic en la confirmación que será la base de la comparación de diferencias. Una vez seleccionada, haz clic con el botón derecho en una segunda confirmación para abrir un menú contextual.

Este menú contextual proporcionará las siguientes opciones:

    Diff this -> selected
    Diff selected -> this

Al seleccionar una estas opciones, aparecerá una comparación de diferencias entre las dos confirmaciones en el panel inferior izquierdo, que en nuestro ejemplo se verá así:

La salida de la comparación de diferencias muestra que index.txt tenía una nueva línea de "contenido antepuesto al índice" añadido entre las dos confirmaciones.

Cómo comparar dos ramas con Gitk

Continuando con nuestro repositorio de ejemplo, vamos a crear una nueva rama.

    git checkout -b new_branch &&
    echo "new branch content" > new_branch_file.txt &&
    git add new_branch_file.txt &&
    git commit -m "new branch commit with new file and prepended content" &&
    echo "new branch index update" >> index.txt &&
    git commit -am "new branch commit to index.txt with new content"

La secuencia de comandos siguiente creará una nueva rama llamada new_branch y le añadirá el archivo new_branch_file.txt. Además, se añade contenido nuevo a index.txt y se realiza una confirmación adicional para esa actualización. Ahora tenemos una nueva rama que está 2 confirmaciones por delante de la main. Debemos volver a cargar Gitk para que estos cambios se reflejen.

Es una gran oportunidad de aprendizaje para hablar sobre el mecanismo de creación de ramas de Git. Gitk muestra las confirmaciones como una secuencia en línea recta. El término "branch" implica que debemos esperar una "rama" o bifurcación en la línea de tiempo. Las ramas de Git son diferentes de otros sistemas de control de versiones. En Git, una rama es un puntero que apunta hacia una confirmación. El puntero se mueve a las confirmaciones a medida que se crean. Cuando creas una git branch, no cambias nada en la estructura del repositorio o en el árbol de origen. Estás creando un nuevo puntero.

Para comparar las confirmaciones que difieren entre las 2 ramas, Gitk debe iniciarse con un rango de revisión determinado. Al ejecutar gitk main..new_branch, Gitk solo se abrirá con las confirmaciones entre las dos referencias de rama.

Esta es una utilidad muy eficaz para comparar ramas.

Diferencias entre Gitk y Git Gui

Git Gui es otra interfaz gráfica de usuario basada en Tcl/Tk para Git. Mientras que Gitk se centra en navegar y visualizar el historial de un repositorio, Git Gui se centra en precisar confirmaciones individuales y en la notación de archivos individuales, y no muestra el historial del proyecto. Git Gui proporciona además acciones de menú para iniciar Gitk con el objetivo de explorar el historial. Git Gui también se invoca desde la línea de comandos ejecutando git gui.

Resumen de Gitk

En conclusión, Gitk es un contenedor de interfaz gráfica para git log. Es muy eficaz para visualizar y explorar el historial de un repositorio. Además, es una herramienta útil para conocer los entresijos de Git.