Chapters ▾ 2nd Edition

A1.1 Appendix A: O Git em Outros Ambientes - Interfaces Gráficas

Se você leu o livro inteiro, aprendeu muito sobre como usar o Git na linha de comando. Você pode trabalhar com arquivos locais, conectar seu repositório a outros em uma rede e trabalhar eficientemente com os outros. Mas a história não termina aí; O Git geralmente é usado como parte de um ecossistema maior, e o terminal nem sempre é a melhor maneira de trabalhar com ele. Agora veremos alguns dos outros tipos de ambientes nos quais o Git pode ser útil e como outros aplicativos (incluindo o seu) funcionam em conjunto com o Git.

Interfaces Gráficas

O ambiente nativo do Git é no terminal. Novos recursos aparecem lá primeiro, e apenas na linha de comando todo o poder do Git está completamente a sua disposição. Mas texto simples não é a melhor escolha para todas as tarefas; às vezes uma representação visual é o que você precisa, e alguns usuários são muito mais confortáveis com uma interface de apontar e clicar.

É importante notar que diferentes interfaces são feitas sob medida para diferentes fluxos de trabalho. Alguns clientes expõem apenas um subconjunto de funções do Git cuidadosamente escolhido, a fim de dar suporte a uma forma de trabalho específica que o autor considera eficaz. Visto por esse ângulo, nenhuma dessas ferramentas pode ser considerada “melhor” do que as outras, elas são simplesmente mais adequadas ao propósito a que se destinam. Note também que não há nada que estes clientes gráficos possam fazer que o cliente de linha de comando não possa; a linha de comando ainda é onde você terá o maior poder e controle ao trabalhar com os seus repositórios.

gitk e git-gui

Quando você instala o Git, você também adquire as suas ferramentas visuais, gitk e git-gui.

O gitk é um visualizador gráfico de histórico. Pense nele como uma poderosa interface gráfica sobre git log e git grep. Esta é a ferramenta a ser usada quando você está tentando encontrar algo que aconteceu no passado, ou visualizar o histórico do seu projeto.

O Gitk é mais facilmente invocado a partir da linha de comando. Basta entrar com cd em um repositório Git e digitar:

$ gitk [git log options]

O Gitk aceita muitas opções de linha de comando, a maioria das quais é repassada para a ação subjacente do git log. Provavelmente uma das mais úteis é a flag --all, que diz ao gitk para mostrar os commits alcançáveis a partir de qualquer referência, e não apenas do HEAD. A interface do Gitk parece com isto:

O visualizador de histórico `gitk`
Figure 177. O visualizador de histórico gitk

No topo fica algo que se parece um pouco com a saída do git log --graph; cada ponto representa um commit, as linhas representam relacionamentos com commits pais, e as refs são mostradas como caixas coloridas. O ponto amarelo representa o HEAD, e o ponto vermelho representa as alterações que ainda não se tornaram um commit. Na parte de baixo fica uma visualização do commit selecionado; os comentários e as mudanças (patch) na esquerda, e uma visão de resumo na direita. No meio há um conjunto de controles utilizados para pesquisar o histórico.

O git-gui, por outro lado, é principalmente uma ferramenta para forjar commits. Ele, também, é mais facilmente invocado a partir da linha de comando:

$ git gui

E ele se parece com isto:

A ferramenta de commits `git-gui`
Figure 178. A ferramenta de commits git-gui

Na esquerda fica o index; alterações não preparadas (unstaged changes) ficam no topo, alterações preparadas (staged changes) na parte inferior. Você pode mover arquivos inteiros entre os dois estados clicando nos ícones deles, ou você pode selecionar um arquivo para visualização clicando no nome dele.

No topo à direita fica a visualização de diff, que mostra as alterações para o arquivo selecionado no momento. Você pode preparar blocos (hunks) individuais (ou linhas individuais) clicando com o botão direito nesta área.

Na parte inferior direita fica a área de mensagens e ações. Digite sua mensagem na caixa de texto e clique em “Commit” para fazer algo similar a git commit. Você também pode escolher consertar o último commit marcando a opção do botão de seleção “Amend”, o que atualizará a área de “Staged Changes” com os conteúdos do último commit. Assim você poderá simplesmente preparar ou não preparar algumas alterações, alterar a mensagem de commit, e clicar em “Commit” novamente para substituir o commit antigo por um novo.

O gitk e o git-gui são exemplos de ferramentas orientadas a tarefas. Cada uma delas é adaptada para um propósito específico (visualizar histórico e criar commits, respectivamente), e omite os recursos não necessários para essa tarefa.

GitHub para macOS e Windows

O GitHub criou dois clientes Git orientados a fluxos de trabalho: um para Windows e um para macOS. Esses clientes são bons exemplos de ferramentas orientadas a fluxos de trabalho – em vez de expor toda a funcionalidade do Git, eles se concentram em um conjunto selecionado de recursos comumente usados que funcionam bem juntos. Eles se parecem com isto:

GitHub para macOS
Figure 179. GitHub para macOS
GitHub para Windows
Figure 180. GitHub para Windows

Eles foram desenvolvidos para terem uma aparência e funcionamento muito parecidos, portanto, vamos tratá-los como um único produto neste capítulo. Não faremos um detalhamento dessas ferramentas (elas possuem sua própria documentação), mas um tour rápido da visualização “changes” (que é onde você passará a maior parte do seu tempo) se faz necessário.

  • À esquerda fica a lista de repositórios que o cliente está rastreando; você pode adicionar um repositório (seja clonando-o ou anexando-o localmente) clicando no ícone “+” no topo desta área.

  • No centro fica a área de entrada de commit, que permite digitar uma mensagem de commit e selecionar quais arquivos devem ser incluídos. No Windows, o histórico de commit é exibido diretamente abaixo; no macOS, fica em uma aba separada.

  • À direita fica a visualização do diff, que mostra o que foi alterado em seu diretório de trabalho, ou quais alterações foram incluídas no commit selecionado.

  • A última coisa a notar é o botão “Sync” no canto superior direito, que é a principal forma como você interage pela rede.

Note

Você não precisa de uma conta do GitHub para usar essas ferramentas. Embora sejam projetados para destacar o serviço e fluxo de trabalho recomendados do GitHub, eles funcionarão de bom grado com qualquer repositório e executarão operações de rede com qualquer host Git.

Instalação

O GitHub para Windows e macOS pode ser baixado em https://desktop.github.com/. Quando os aplicativos são executados pela primeira vez, eles guiam você por toda a configuração inicial do Git, como configurar seu nome e endereço de e-mail, e ambos definem padrões coerentes para muitas opções de configuração comuns, como caches de credenciais e o comportamento de CRLF.

Ambos são aplicativos do tipo “evergreen” – as atualizações são baixadas e instaladas em segundo plano enquanto os aplicativos estão abertos. Isso inclui utilmente uma versão embutida (bundled) do Git, o que significa que você provavelmente não terá que se preocupar em atualizá-lo manualmente novamente. No Windows, o cliente inclui um atalho para abrir o PowerShell com o Posh-git, sobre o qual falaremos mais tarde neste capítulo.

O próximo passo é fornecer à ferramenta alguns repositórios para ela trabalhar. O cliente mostra para você uma lista contendo os repositórios aos quais você tem acesso no GitHub, e permite cloná-los em um único passo. Se você já tiver um repositório local, basta arrastar seu diretório a partir do Finder ou Windows Explorer para dentro da janela do cliente do GitHub, e ele será incluído na lista de repositórios à esquerda.

Fluxo de Trabalho Recomendado

Uma vez que esteja instalado e configurado, você pode usar o cliente do GitHub para muitas das tarefas comuns do Git. O fluxo de trabalho proposto para essa ferramenta é algumas vezes chamado de “GitHub Flow.” Nós cobrimos isso com mais detalhes em O Fluxo do GitHub (GitHub Flow), mas a ideia geral é que (a) você vai estar realizando commits em um branch, e (b) você estará sincronizando com um repositório remoto bem regularmente.

O gerenciamento de branches é uma das áreas onde as duas ferramentas divergem. No macOS, há um botão no topo da janela para a criação de um novo branch:

Botão de “Create Branch” no macOS
Figure 181. Botão de “Create Branch” no macOS

No Windows, isto é feito ao digitar o nome do novo branch no componente de alternância de branch (branch-switching widget):

Criando um branch no Windows
Figure 182. Criando um branch no Windows

Uma vez que o seu branch foi criado, a criação de novos commits é algo bastante simples. Faça algumas modificações no seu diretório de trabalho, e quando você voltar para a janela do cliente do GitHub, ela irá lhe mostrar quais arquivos sofreram modificações. Digite a sua mensagem do commit, selecione os arquivos que você queira incluir, e então clique no botão “Commit” (ctrl-enter ou ⌘-enter).

A principal maneira de você interagir com outros repositórios por meio da rede é através da função de “Sync”. O Git possui internamente operações separadas para empurrar (pushing), buscar (fetching), unificar (merging), e de rebasing, no entanto os clientes do GitHub transformam (collapse) todos estes procedimentos dentro de uma funcionalidade única que ocorre em múltiplos passos. Eis o que acontece quando você clica no botão de Sync (Sincronizar):

  1. git pull --rebase. Se isso falhar devido a um conflito de merge, o passo recorre alternativamente ao git pull --no-rebase.

  2. git push.

Esta é a sequência mais comum de comandos de rede ao se trabalhar usando esse estilo, e portanto, o ato de esmagá-los (squashing them) dessa forma num comando apenas fará com que poupe muito tempo.

Resumo

Estas ferramentas são muito bem adequadas para o fluxo de trabalho (workflow) ao qual elas foram projetadas. Os desenvolvedores e não-desenvolvedores conseguem estar de mesma forma colaborando em um projeto numa questão de apenas minutos, e diversas dentre as melhores práticas para esse tipo de fluxo de trabalho estão cozidas e preparadas (baked into) diretamente para dentro das ferramentas em si. Entretanto, se o seu fluxo de trabalho for diferente, ou se você desejar maior controle sobre a forma que se dá de como e quando que as operações de rede são feitas, recomendamos a você pela utilização de algum outro cliente de Git ou da mesma forma o uso por via da linha de comandos.

Outras GUIs

Há um número de outros clientes de Git na categoria gráfica, e eles permeiam pela gama indo desde as ferramentas especializadas, com propósito único, e indo a todo caminho que dispõe até aplicações que tentam expor de tudo que o Git puder fazer. O site oficial do Git apresenta a você contida em seu dispor uma lista providenciada de forma sendo ela uma curada lista dos clientes mais populares no https://git-scm.com/downloads/guis. Uma lista mais compreensível, ampla e geral, está disposta de disponível lá no site da wiki do Git, pelo caminho no link no qual de https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces.