GitK
O Gitk é um navegador de repositório gráfico. Foi o primeiro desse tipo. Ele pode ser pensado como wrapper de GUI para git log
. É útil para explorar e visualizar o histórico do repositório. Está escrito em tcl/tk, o que o torna portátil em todos os sistemas operacionais. O gitk
é mantido por Paul Mackerras como um projeto independente, separado do núcleo do Git. As versões estáveis são distribuídas como parte do pacote Git para a conveniência dos usuários finais. O Gitk pode ser uma ajuda de aprendizagem útil para iniciantes no Git.
Visão geral do Gitk
O Gitk pode ser um utilitário de aprendizado útil para quem é novo no controle de versão ou para aqueles que estão fazendo a transição de outro sistema de controle de versão, como o subversion. O Gitk é um utilitário de conveniência que vem com o Git core. Ele proporciona uma interface gráfica do usuário que ajuda na visualização da mecânica interna do Git. Outras GUIs popular do Git são o git-gui e o próprio Sourcetree da Atlassian.
Uso
O Gitk é invocado semelhante ao git log
. A execução do comando gitk
vai iniciar a interface do usuário do Gitk, que vai ser semelhante a seguinte:

O painel superior esquerdo exibe as confirmações no repositório, com o mais recente no topo. O canto inferior direito exibe a lista de arquivos afetados pelo commit selecionada. O painel inferior esquerdo exibe as informações do commit e a diferença completa. Clicar em um arquivo no painel inferior direito focaliza a diferença no painel inferior esquerdo para a seção relevante.
O Gitk vai refletir no estado atual do repositório Se o estado do repositório for modificado por meio do uso separado da linha de comando, como alterar ramificações, o Gitk precisa ser recarregado. O Gitk pode ser recarregado no menu Arquivo -> Recarregar.
Por padrão, o Gitk vai renderizar o histórico atual dos commits. O Gitk tem uma variedade de opções de linha de comando que podem ser passadas na inicialização. Essas opções restringem a lista de commits renderizadas para a visualização de nível superior do Gitk. A forma geral de execução com essas opções de revisão é a seguinte:
Opções
gitk [<options>] [<revision range>] [--] [<path>…]
<revision range>
Um intervalo de revisão na forma "
pode ser passado para mostrar todas as revisões entre
e de volta para
. Como alternativa, uma única revisão pode ser aprovada.
<path>…
Limite os commits a um caminho de arquivo específico. Para isolar caminhos de nomes de revisão, use "--" para separar os caminhos de qualquer opção anterior.
--all
Mostra todas as ramificações, marcações, refs.
--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]
Exibe o item selecionado (ramificações, marcações, controles remotos) como se fossem confirmações da linha principal. Quando o
é passado, limita ainda mais as referências àquelas que correspondem ao padrão especificado
--since=<date>
Mostrar confirmações mais recentes do que a data especificada.
--until=<date>
Mostrar as confirmações mais antigas do que a data especificada.
--date-order
Classifica as confirmações por data.
--merge
Mostrar confirmações que modificam arquivos em conflito que foram identificados durante um merge
--left-right
Mostra categorias informativas que indicam de que lado de um commit de comparação é. Os commits do lado esquerdo são prefixados com um< símbolo e os da direita com um> símbolo.
--ancestry-path
Quando for dado um intervalo de commits para exibir (por exemplo. commit1.. commit2 ou commit2 commit1
), exibe apenas commits que existem direto na cadeia de ancestralidade entre o commit1
e commit2
, ou seja, commits que são descendentes de commit1
e ancestrais de commit2
. (Consulte Simplificação do" histórico" no git-log (1)
para uma explicação mais detalhada.)
L<start>,<end>:<file>
Opções poderosas que permitem rastrear o histórico de um determinado intervalo de números de linha de código.
Discussão e exemplos
Para apresentar qualquer resultado valioso, o Gitk precisa de um repositório subjacente com histórico comprometido. O código a seguir é uma sequência de comandos bash que vai criar um novo repositório com duas ramificações que têm confirmações e foram mescladas em uma.
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 repositório de demonstração vai ser um bom exemplo para explorar com o Gitk. Essa sequência de comandos cria um novo repositório com 1 commit e um arquivo index.txt
. Vamos agora invocar o gitk
para examinar o repositório.

O Gitk pode comparar dois commits?
Vamos continuar com o repositório de demonstração e criar um commit adicional:
echo "prpended content to index" >> index.txt &&
git commit -am "prepended content to index"
Assim que os comandos em andamento forem executados, o gitk
precisa ser recarregado. Recarregue o gitk
na linha de comando ou use a GUI e navegue até Arquivo -> Recarregar
. Depois de recarregado, devemos ver a nova confirmação
.

Podemos ver que a referência da ramificação principal
agora está apontada para a nova confirmação. Para comparar essas duas confirmações, usamos o painel de histórico superior esquerdo. No painel de histórico, clique em um commit que vai ser a base do diff. Depois de selecionado, clique com o botão direito do mouse no segundo commit para abrir um menu de contexto.

Esse menu de contexto vai oferecer as seguintes opções
Diff this -> selected
Diff selected -> this
Selecionar uma dessas opções vai fazer com que uma diferença entre as duas confirmações apareça no painel inferior esquerdo, que no exemplo vai ser semelhante a:

A saída do diff nos mostra que o index.txt
tinha uma nova linha de "conteúdo anexado ao índice" adicionada entre as duas confirmações.
Como usar o Gitk para comparar dois branches
Continuando com o repositório de exemplo, vamos criar uma nova ramificação.
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"
A sequência de comandos em andamento vai criar uma nova ramificação chamada new_branch
e vai adicionar o arquivo new_branch_file.txt
a ela. Além disso, um novo conteúdo é adicionado ao index.txt
e uma confirmação adicional é feita para essa atualização. Agora temos uma nova ramificação que está 2 confirmações à frente do main. Precisamos recarregar o Gitk para refletir essas mudanças.

Essa é uma ótima oportunidade de aprendizado para discutir o mecanismo de ramificação do Git. O Gitk exibe as confirmações como uma sequência em linha reta de confirmações. O termo ramificação implica que devemos esperar uma ramificação ou bifurcação no cronograma. As ramificações do Git são diferentes de outros sistemas de controle de versão. No Git, uma ramificação é um ponteiro para uma confirmação. O ponteiro se move para as confirmações à medida que são criados. Quando você cria um branch git
, você não está alterando nada na estrutura do repositório ou na árvore de origem. Você está apenas criando um novo ponteiro.
Para comparar as confirmações que diferem entre as 2 ramificações, o Gitk precisa ser iniciado com um intervalo de revisão especificado. Ao executar gitk main.. new_branch
, vai abrir o Gitk apenas com as confirmações entre as duas referências de ramificação

Este é um utilitário poderoso para comparar ramificações.
Gitk vs. Git Gui
Git Gui é outra interface gráfica de usuário baseada em Tcl/Tk para o Git. Enquanto o Gitk se concentra em navegar e visualizar o histórico de um repositório, o Git Gui se concentra em refinar confirmações
individuais, anotação de arquivo único e não mostra o histórico do projeto. O Git Gui também proporciona ações de menu para iniciar o Gitk para exploração do histórico. O Git Gui também é invocado a partir da linha de comando executando git gui
.
Resumo do Gitk
Em conclusão, o Gitk é um wrapper de interface gráfica para git log
. O Gitk é poderoso para visualizar e explorar a história de um repositório. O Gitk também é uma ferramenta útil para aprender os dados internos do Git.