diff --git a/cap06.Rmd b/cap06.Rmd index f2ab8b72557ce5e6a42caf91a3f258b4469aa7ae..fb2839f8c9adf8e10f2eaf617aa320b6d73b2c1b 100644 --- a/cap06.Rmd +++ b/cap06.Rmd @@ -14,7 +14,7 @@ library(knitr) opts_chunk$set(comment = NA) ``` -## Ferramentas gráficas ## +# Ferramentas gráficas # No GIT, como vimos até agora, todo o gerenciamento do projeto é realizado via *CLI (Command line interface)*, linhas de comando @@ -27,58 +27,54 @@ Os comandos mais usuais como `git add`, `git commit` se tornam simples, pois, mesmo para um usuário iniciante eles fazem parte do cotidiano em um projeto sob versionamento GIT. Mas algumas situações que não ocorrem com frequência, como por exemplo voltar a versão de um arquivo ou do -repositório, requerem comandos que são pouco utilizados e, não raramente -para realizá-las é necessário a consulta de algum material sobre -GIT. Outra situação onde a utilização dos comandos é dificultada, ocorre -para projetos maiores, onde muitos arquivos são alterados -simultaneamente e o procedimento de *commit* se torna trabalhoso, pois -é necessário listar todos os arquivos que fazem parte de um *commit* -no commando `git add`. Uma última situação exemplo em que o uso de *CLI* -não parece satisfatório é na comparação de arquivos, já usamos o comando -`git diff` na capÃtulo 3 e o *output* deste comando foi de simples -visualização, mas em arquivos maiores (com muitas linhas) a navegação -para verificar as alterações do arquivo não é tão amigável. Para -facilitar essas e outras situações surgem as *GUI's (Graphical User -Interfaces)*, interfaces gráficas para o usuário que incorporam comandos -GIT em *widgets*(botões, caixas de texto etc.) dispostos em um janela +repositório, requerem comandos que são pouco utilizados e para realizá-las +é necessário a consulta de algum material sobre GIT. Outra situação onde +a utilização dos comandos é dificultada, ocorre para projetos maiores, onde +muitos arquivos são alterados simultaneamente e o procedimento de *commit* +se torna trabalhoso, pois é necessário listar todos os arquivos que fazem +parte de um *commit* no commando `git add`. Uma última situação exemplo +em que o uso de *CLI* não parece satisfatório é na comparação de arquivos, +já usamos o comando `git diff` no capÃtulo 3 e o *output* deste comando +foi de simples visualização, mas em arquivos maiores (com muitas linhas) +a navegação para verificar as alterações do arquivo não é tão amigável. Para +facilitar essas e outras situações surgem as *GUI's (Graphical User +Interfaces)*, interfaces gráficas para o usuário que incorpora comandos +GIT em *widgets*(botões, caixas de texto etc.) dispostos em uma janela gráfica de seu sistema operacional. -Neste capÃtulo apresentamos as principais *GUI's* para GIT em diferentes -plataformas sistemas UNIX, Mac OS X e Windows. Detalhes de download, -instalação e exemplos da utilização destas interfaces no fluxo de -trabalho de um projeto com versionamento **GIT** são descritos. -## Interfaces GIT ## +# Interfaces GIT # -Neste material chamaremos de **Interfaces GIT** as *GUI's* para gestão de um -repositório **GIT**. Estas facilitam a utilização das principais -instruções **GIT** (`git add`, `git commit`, `git push`, `git pull`) e a +Neste material chamaremos de **Interfaces GIT** as *GUI's* para gestão +de um repositório. Estas facilitam a utilização das principais +instruções **GIT** (`git add`, `git commit`, `git push`, `git pull`), visualização dos arquivos e alterações no repositório. -Desde o surgimento do GIT diversas *GUI's* foram propostas. Este -capÃtulo ter por objetivo apresentar as mais usuais interfaces dos -sistemas operacionais UNIX, Mac OS X e Windowns. +Desde o surgimento do GIT diversas *GUI's* foram propostas. Neste +capÃtulo apresentamos as principais *GUI's* em diferentes plataformas nos +sistemas UNIX, Mac OS X e Windows. Detalhes de download, instalação e +exemplos da utilização destas interfaces no fluxo de trabalho de um +projeto com versionamento **GIT** são descritos. -### git-gui ### +## git-gui ## Baseada em *Tcl/Tk* a *GUI* chamada `git gui` é mantida como projeto independente do GIT, mas as versões estáveis são distribuÃdas junto com -o programa principal. Portanto não é necessário o download e +o programa principal, portanto não é necessário o download e instalação. A interface é voltada para realizar alterações no -repositório. `git gui` permite a realização de diversas modificações, -desde as mais simples como *commitar* arquivos até as mais especÃficas -como voltar estágios ou reescrever o último *commit* (muito útil quando -notamos erros de gramática logo após a submissão). Nesta seção -abordaremos apenas as alterações mais comuns no repositório. +repositório, desde as mais simples como *commitar* arquivos até as mais +especÃficas como voltar estágios ou reescrever o último *commit* (muito +útil quando notamos erros de gramática logo após a submissão). Nesta +seção abordaremos apenas as alterações mais comuns no repositório. `git gui`, no Windows, pode ser aberto pelo menu iniciar. Nesta plataforma, ao instalar o GIT (conforme visto no capÃtulo 2) duas aplicações ficam disponÃveis **git BASH** e **git GUI**. Em sistemas -LINUX podemos criar um *alias* (criar e editando adequadamente um -arquivo em */usr/share/applications*) para que `git gui` fique listada +LINUX podemos criar um *alias* (criar e editar adequadamente um +arquivo em */usr/share/applications*) para que a `git gui` fique listada junto as aplicações do sistema. --Descobrir no MAC se `git gui` fica no lançador automaticamente. Porém, de forma geral, independente da -plataforma de trabalho `git gui` pode ser iniciada a partir de um +plataforma de trabalho, a `git gui` pode ser iniciada a partir de um terminal `bash`, com o comando: ```sh @@ -86,7 +82,7 @@ git gui ``` Para exemplificar a utilização desta interface vamos alterar alguns -arquivos do repositório `meu1repo`, criado no capÃtulo 2. +arquivos do repositório `meu1repo`, criado no capÃtulo 3. ```{r, engine = "bash", include = FALSE} if [ -d meu1repo ]; then @@ -180,52 +176,52 @@ Após as alterações a interface gráfica é chamada.  FIGURA: Inteface `git gui` -A interface `git gui` se apresenta de forma bem simples, o que facilita +A interface `git gui` se apresenta de forma simples, o que facilita sua utilização. Na figura ?? detacamos as quatro áreas que compreendem a interface. Na primeira porção temos listados os arquivos presentes no *working directory*, os arquivos criados aparecem com Ãcone em branco e -os modificados com linhas em azul. E aqui a interface implementa +os modificados com linhas em azul, aqui a interface implementa interativamente o comando `git add`, pois ao clicar no Ãcone de um arquivo ele é automaticamente adicionado à *staging area*. Na segunda parte são listados os arquivos na *staging area* com Ãcone de *check -mark*. Na terceira parte destacada temos a implementação do comando -`git diff` para qualquer arquivo selecionado. Com destaque de cores a -interface apresenta em vermelho as deleções e verde as adições. Por fim +mark*. Na terceira parte temos a implementação do comando +`git diff` para qualquer arquivo selecionado. Com destaque de cores, a +interface apresenta em vermelho as deleções e em verde as adições. Por fim temos no canto inferior direito a área para escrever *commits* com botões para submissão de ação. Um detalhe importante do `git gui` é que o idioma do sistema operacional é verificado para sua construção, ou seja, os botões da interface na figura ?? são *push*, *commit*, *sign off*, etc pois o idioma do sistema operacional em que essa interface foi -executado é o inglês. Para português (Brasil) as mensagem ficam ..... +executada é o inglês. Para português (Brasil) as mensagens ficam ..... Além das quatro áreas principais da interface, que facilitam interativamente atividades como `git status`, `git diff`, `git add`, `git commit` e `git push`, temos mais implementações no menu da interface para procedimentos não cotidianos. Essas implementações podem -ser acessadas com um simples clique, e são bem auto-explicativas. +ser acessadas com um simples clique e são auto-explicativas. -### gitk ### +## gitk ## -Pioneira dentre as interfaces gráficas para GIT, `gitk` foi a primeira -*GUI* implementada pra GIT. Também implementada em *Tcl/Tk* esta *GUI* -tem como objetivo a apresentação do histórico de um projeto GIT. `gitk` -é incorporado ao principal repositório do GIT, portanto nas instalações -completas do GIT esta interface já fica disponÃvel sem ser necessário +Pioneira dentre as interfaces gráficas, `gitk` foi a primeira +*GUI* implementada. Também implementada em *Tcl/Tk*, esta *GUI* +tem como objetivo a apresentação do histórico de um projeto. A `gitk` +é incorporada ao principal repositório do GIT, portanto nas instalações +completas do GIT esta interface fica disponÃvel sem ser necessário download e instalação. Nesta seção apresentamos a `gitk` detalhando a disposição dos elementos nesta interface que se mostra muito útil na visualização de projetos GIT. -`gitk` trabalha em conjunto com a `git gui`. Em `git gui` podemos fazer +A `gitk` trabalha em conjunto com a `git gui`. Em `git gui` podemos fazer alterações de forma rápida e visual nos arquivos que estão na *staging area* e *working directory*, porém para visualizar o histórico completo -de *commits*, com ramificações, marcações e demais detalhes, recorremos +de *commits* com ramificações, marcações e demais detalhes, recorremos à `gitk`. Essa interface se mostra muito útil também como ferramenta de aprendizagem GIT, uma vez que visualizar de forma gráfica as alterações que os comandos realizados causam no projeto, torna mais fácil a compreensão dos mesmos. `gitk`, assim como a `git gui` pode ser chamada atráves de linha de -comando. +comando: ```sh gitk @@ -233,21 +229,21 @@ gitk Para exemplificar a disposição dos elementos nesta interface, seguimos com as alterações feitas na seção anterior, lembrando que temos todas as -alterações já realizadas no capÃtulo 2 e ainda duas modificações e uma +alterações já realizadas no capÃtulo 3 e ainda duas modificações e uma inclusão de arquivos não *commitadas*. Visualizando a interface `gitk` chamada neste estado do repositório temos:  FIGURA: Inteface `gitk` -Perceba na figura ?? que esta interface é bem mais completado que a `git -gui`, no que diz respeito à informação. Divida em apenas duas partes a +Perceba na figura ?? que esta interface é bem mais completa do que a `git +gui` no que diz respeito à informação. Dividida em apenas duas partes, a `gitk` apresenta na primeira todo o histórico do projeto, é uma implementação visual e agradável do comando `git log --graph`. No -gráfico apresentado as bolinhas azuis representam *commits* passados, a -amarelo indica o estado atual do repositório e em vermelho são as -modificações no *working directory* ao lado estão os autores dos -respectivos *commits* e o momento em que foram feitos. Na parte +gráfico apresentado na parte superior, as bolinhas azuis representam +*commits* passados, a de amarelo indica o estado atual do repositório e +em vermelho são asmodificações no *working directory*. Ao lado estão os +autores dos respectivos *commits* e o momento em que foram feitos. Na parte inferior da interface temos o detalhamento do *commit* selecionado na parte superior. As informações contidas aqui vão desde o identificador do *commit* (*SHA1 ID*), diferença das modificações @@ -255,11 +251,11 @@ referenciadas por este *commit* com relação ao estado anterior do repositório até a listagem dos arquivos atingidos pelo *commit* selecionado. -Além da exelente apresentação visual do repositório GIT, `gitk` também -permite algumas alterações. Clicando com o botão direito de seu *mouse* -em qualquer *commit* listado podemos criar *tags*, reverte o repositório -neste estado, criar um ramo a partir do *commit* dentre outras opções -possÃveis atráves da interface. +Além da excelente apresentação visual do repositório GIT, a interface +`gitk` também permite algumas alterações. Clicando com o botão direito de +seu *mouse* em qualquer *commit* listado podemos criar *tags*, reverter o +repositório neste estado, criar um ramo a partir do *commit* dentre outras +opções possÃveis atráves da interface. `gitk` é uma implementação em *Tcl/Tk* para visualização de repositórios GIT. Com o mesmo objetivo outras interfaces gráficas foram @@ -267,20 +263,20 @@ implementadas. Podemos destacar duas delas pela grande similaridade à -`gitk`, são elas `gitg` e `gitx`. Ambas +`gitk`, são elas `gitg` e `gitx`. Ambas podem ser instalar em: * https://git-scm.com/docs/gitk * https://lostechies.com/joshuaflanagan/2010/09/03/use-gitk-to-understand-git/ -### Outras Interfaces ### +## Outras Interfaces ## -#### gitg e gitx #### +### gitg e gitx ### -Estas duas interfaces tentam juntar em uma única as opções -proporcionadas pela `git gui` e pela `gitk`. Os layouts são muito -similares e as propostas também a diferença está na portabilidade. -`gitg` é implementada em *GTk+* e está disponÃvel para sistemas LINUX e -`gitx` foi implementado para Mac OS seguindo o estilo de aplicativos +Estas duas interfaces tentam juntar em uma única as opções proporcionadas +pela `git gui` e pela `gitk`. Os layouts e as propostas são similares, a +diferença está na portabilidade. +A `gitg` é implementada em *GTk+* e está disponÃvel para sistemas LINUX e a +`gitx` foi implementada para Mac OS seguindo o estilo de aplicativos deste sistema operacional. De forma geral não há detalhes a serem repassados sobre estas interfaces uma vez que as possibilidades já foram listadas nas seções sobre `git gui` e `gitk` @@ -291,11 +287,11 @@ FIGURA: Interface `gitg`  FIGURA: Interface `gitx` -#### RabbitVCS #### +### RabbitVCS ### *RabbitVCS* é uma coleção de ferramentas gráficas para navegadores de - arquivos dos sistemas LINUX que permitem o acesso simples e direto aos - sistemas de controle de versão, GIT e/ou Subversion. Não se caracteriza + arquivos do sistema LINUX que permitem o acesso simples e direto aos + sistemas de controle de versão GIT e/ou Subversion. Não se caracteriza como interface, porém altera a visualização no navegador de arquivos de diretórios sob versionamento GIT além de dispor de ações implementadas nas opções do menu quando pressionado o botão direito do mouse. @@ -307,77 +303,76 @@ Na figura ?? temos o *screenshot* do repositório `meu1repo` no navegor de arquivos `nautilus` (padrão do sistema Ubuntu 14.04). Perceba que com essa interface os Ãcones de arquivos e pastas no navegador ganham destaque com um outro pequeno Ãcone na paste inferior. Estes pequenos -Ãcones indicam o estado do arquivo sem precisar recorrerao terminal, ou +Ãcones indicam o estado do arquivo sem precisar recorrer ao terminal, ou seja, temos um `git status` no próprio navegador de arquivos. Além disso `RabbitVCS` complementa o menu de opções acessados com o botão direito -do mouse. As opções implementadas neste menu são muito completas, vão -desde simples *commits*, criação de *branchs* e *tags* até a ações de +do mouse. As opções implementadas neste menu são completas, vão +desde *commits*, criação de *branchs* e *tags* até a ações de reverter o estado do repositório. -#### git-cola #### +### git-cola ### Esta também é uma interface alternativa que se destaca por ser completa e pela portabilidade (disponÃvel para sistema LINUX, Windows e -Mac. Implementada em *python* `git-cola` é uma alternativa à `git gui` -e contém praticamente os mesmo elementos para alterações no -repositório. Como `git gui` se auxilia da `gitk` para visualização, -`git-cola` também tem uma interface de apoio, chamada de `git-dag` que +Mac). Implementada em *python*, `git-cola` é uma alternativa à `git gui` +e contém praticamente os mesmos elementos para alterações no +repositório. Como a `git gui` se auxilia da `gitk` para visualização, +a `git-cola` também tem uma interface de apoio, chamada de `git-dag` que vem instalado junto ao `git-cola`.  FIGURA: Interface `git-cola` e `git-dag` -Perceba pela figura ?? que as opções das interfaces são muito similares +Perceba pela figura ?? que as opções das interfaces são similares as apresentadas em `git gui` e `gitk`. As interfaces `git-cola` e `git-dag` se destacam pela fácil manipulação do layout exibido, além de -buscar deixar a interface o mais intuitiva possÃvel. Como destaque em -implementação de funcionalidade GIT, `git-cola` se sobresai com relação +buscar deixar a interface mais intuitiva possÃvel. Como destaque em +implementação de funcionalidade GIT, a `git-cola` se sobressai com relação à `git gui` na possibilidade de execução do comando `git rebase` via interface. -#### Plugins e extensões para editores #### +### Plugins e extensões para editores ### -Muitas vezes é inconveniente trabalhar em códigos fonte em um editor e +Muitas vezes é inconveniente trabalhar com códigos fonte em um editor e ter que abrir um terminal *bash* em outra janela do sistema operacional -para verificar o sistema versionamento, realizar commits, +para verificar o sistema de versionamento, realizar commits, etc. Felizmente alguns editores possuem um sistema **GIT** integrado, -seja por meio de *plugins* adicionais instalados ou opção nativa do +seja por meio de *plugins* adicionais instalados ou pela opção nativa do editor. -Destacamos aqui três editores, comumente utilizados pela comunidade +Destacamos aqui dois editores, comumente utilizados pela comunidade estatÃstica, que possuem os comandos **GIT** intergrado à sua -interface. São eles o `emacs`, onde temos as opções de *buffers* no -editores onde podemos abrir uma isntância *shell* e executar os comandos +interface. São eles, o `emacs`, o qual temos as opções de *buffers* nos +editores onde podemos abrir uma instância *shell* e executar os comandos **GIT** junto com o desenvolvimento do código fonte. Além disso uma -extensão bastante poderosa está disponÃvel e em desenvolvimento para o -**GIT** no `emacs`, de nome `magit`[^magit] esta extensão proporciona -opções de comandos e visualização em um *buffer* do editor que facilitam -muito o trabalho de verisionamento. Outro editor também muito utilizado -em EstatÃstica, talvez o mais utilizado pela comunidade, é o RStudio que -também implementa em sua interface vários comandos **GIT**, assim como -as interfaces anterioremente descritas e de para tarefas não triviais -uma chamada do terminal *Shell* é possÃvel dentro do aplicativo. As -diversas ferramentas do editor RStudio serão exploradas no capÃtulo ??, -com exemplos e ilustrações voltadas para a comunidade estatÃstica. - -## Interfaces de comparação ## +extensão poderosa chamada `magit`[^magit] está disponÃvel e em +desenvolvimento para o **GIT** no `emacs`, esta extensão proporciona +opções de comandos e visualização em um *buffer* do editor que facilita +o trabalho de versionamento. Outro editor também muito utilizado em +EstatÃstica, talvez o mais utilizado pela comunidade, é o RStudio que +também implementa em sua interface vários comandos, assim como as +interfaces anteriormente descritas e para tarefas não triviais uma +chamada do terminal *Shell* é possÃvel dentro do aplicativo. As diversas +ferramentas do editor RStudio serão exploradas no capÃtulo ??, com +exemplos e ilustrações voltadas para a comunidade estatÃstica. + +# Interfaces de comparação # Uma das principais vantagens do **GIT** é a possibilidade de trabalho -paralelo por dois ou mais usuários ou por ramos de desenvolvimentos. E -como qualquer desenvolvimento pararelelo desejamos, ao final do -trabalho, mesclar as contribuições realizadas lado a lado. Como vimos no -capÃtulo 2 isso é feito no **GIT** com o comando `git merge -ramo_desenvolvimento` para ramos e com o comando `git push origin`, -quando estamos trabalhando em equipe e as contribuições são enviadas para -um servidor remoto. Porém, quando a mesma porção de um mesmo arquivo é -alterada em duas instâncias distintas (ramos diferentes, usuários -diferentes etc.) ocorrem conflitos e vimos como o **GIT** os sinaliza -para que possamos resolvê-los abrindo e alteramos os arquivos em -conflito. Nesta seção mostraremos as interfaces gráficas dedicadas à -resolução de conflitos no mesclagem e a visualização da diferença de -arquivos em estados diferentes do repositório. - -### Ferramentas de Comparação Padrão ### +paralelo por dois ou mais usuários ou por ramos de desenvolvimento. E +como qualquer desenvolvimento paralelo, desejamos ao final do trabalho, +mesclar as contribuições realizadas lado a lado. Como vimos no capÃtulo +3 isso é feito através do comando `git merge ramo_desenvolvimento` para ramos +locais e com o comando `git push origin` quando estamos trabalhando em +equipe e as contribuições são enviadas para um servidor remoto, capÃtulo +4. Porém, quando a mesma porção de um mesmo arquivo é alterada em duas +instâncias distintas (ramos diferentes, usuários diferentes etc.) ocorrem +conflitos e vimos como o **GIT** os sinaliza para que possamos resolvê-los. +Nesta seção mostraremos as interfaces gráficas dedicadas à resolução de +conflitos no mesclagem e a visualização da diferença de arquivos em +estados diferentes do repositório. + +## Ferramentas de Comparação Padrão ## * meld + Download e Instalação @@ -391,7 +386,7 @@ arquivos em estados diferentes do repositório. + Utilização no **GIT** como `difftool` e/ou `mergetool` + screenshots -### Outras interfaces ### +## Outras interfaces ## * P4Merge diff --git a/cap06.md b/cap06.md index 9d436f612ed6e4751c282856978be6cd75db008b..7a491c791e0d139c5d3d23aa985735dc3ac62200 100644 --- a/cap06.md +++ b/cap06.md @@ -3,7 +3,7 @@ PET EstatÃstica UFPR -## Ferramentas gráficas ## +# Ferramentas gráficas # No GIT, como vimos até agora, todo o gerenciamento do projeto é realizado via *CLI (Command line interface)*, linhas de comando @@ -16,58 +16,54 @@ Os comandos mais usuais como `git add`, `git commit` se tornam simples, pois, mesmo para um usuário iniciante eles fazem parte do cotidiano em um projeto sob versionamento GIT. Mas algumas situações que não ocorrem com frequência, como por exemplo voltar a versão de um arquivo ou do -repositório, requerem comandos que são pouco utilizados e, não raramente -para realizá-las é necessário a consulta de algum material sobre -GIT. Outra situação onde a utilização dos comandos é dificultada, ocorre -para projetos maiores, onde muitos arquivos são alterados -simultaneamente e o procedimento de *commit* se torna trabalhoso, pois -é necessário listar todos os arquivos que fazem parte de um *commit* -no commando `git add`. Uma última situação exemplo em que o uso de *CLI* -não parece satisfatório é na comparação de arquivos, já usamos o comando -`git diff` na capÃtulo 3 e o *output* deste comando foi de simples -visualização, mas em arquivos maiores (com muitas linhas) a navegação -para verificar as alterações do arquivo não é tão amigável. Para -facilitar essas e outras situações surgem as *GUI's (Graphical User -Interfaces)*, interfaces gráficas para o usuário que incorporam comandos -GIT em *widgets*(botões, caixas de texto etc.) dispostos em um janela +repositório, requerem comandos que são pouco utilizados e para realizá-las +é necessário a consulta de algum material sobre GIT. Outra situação onde +a utilização dos comandos é dificultada, ocorre para projetos maiores, onde +muitos arquivos são alterados simultaneamente e o procedimento de *commit* +se torna trabalhoso, pois é necessário listar todos os arquivos que fazem +parte de um *commit* no commando `git add`. Uma última situação exemplo +em que o uso de *CLI* não parece satisfatório é na comparação de arquivos, +já usamos o comando `git diff` no capÃtulo 3 e o *output* deste comando +foi de simples visualização, mas em arquivos maiores (com muitas linhas) +a navegação para verificar as alterações do arquivo não é tão amigável. Para +facilitar essas e outras situações surgem as *GUI's (Graphical User +Interfaces)*, interfaces gráficas para o usuário que incorpora comandos +GIT em *widgets*(botões, caixas de texto etc.) dispostos em uma janela gráfica de seu sistema operacional. -Neste capÃtulo apresentamos as principais *GUI's* para GIT em diferentes -plataformas sistemas UNIX, Mac OS X e Windows. Detalhes de download, -instalação e exemplos da utilização destas interfaces no fluxo de -trabalho de um projeto com versionamento **GIT** são descritos. -## Interfaces GIT ## +# Interfaces GIT # -Neste material chamaremos de **Interfaces GIT** as *GUI's* para gestão de um -repositório **GIT**. Estas facilitam a utilização das principais -instruções **GIT** (`git add`, `git commit`, `git push`, `git pull`) e a +Neste material chamaremos de **Interfaces GIT** as *GUI's* para gestão +de um repositório. Estas facilitam a utilização das principais +instruções **GIT** (`git add`, `git commit`, `git push`, `git pull`), visualização dos arquivos e alterações no repositório. -Desde o surgimento do GIT diversas *GUI's* foram propostas. Este -capÃtulo ter por objetivo apresentar as mais usuais interfaces dos -sistemas operacionais UNIX, Mac OS X e Windowns. +Desde o surgimento do GIT diversas *GUI's* foram propostas. Neste +capÃtulo apresentamos as principais *GUI's* em diferentes plataformas nos +sistemas UNIX, Mac OS X e Windows. Detalhes de download, instalação e +exemplos da utilização destas interfaces no fluxo de trabalho de um +projeto com versionamento **GIT** são descritos. -### git-gui ### +## git-gui ## Baseada em *Tcl/Tk* a *GUI* chamada `git gui` é mantida como projeto independente do GIT, mas as versões estáveis são distribuÃdas junto com -o programa principal. Portanto não é necessário o download e +o programa principal, portanto não é necessário o download e instalação. A interface é voltada para realizar alterações no -repositório. `git gui` permite a realização de diversas modificações, -desde as mais simples como *commitar* arquivos até as mais especÃficas -como voltar estágios ou reescrever o último *commit* (muito útil quando -notamos erros de gramática logo após a submissão). Nesta seção -abordaremos apenas as alterações mais comuns no repositório. +repositório, desde as mais simples como *commitar* arquivos até as mais +especÃficas como voltar estágios ou reescrever o último *commit* (muito +útil quando notamos erros de gramática logo após a submissão). Nesta +seção abordaremos apenas as alterações mais comuns no repositório. `git gui`, no Windows, pode ser aberto pelo menu iniciar. Nesta plataforma, ao instalar o GIT (conforme visto no capÃtulo 2) duas aplicações ficam disponÃveis **git BASH** e **git GUI**. Em sistemas -LINUX podemos criar um *alias* (criar e editando adequadamente um -arquivo em */usr/share/applications*) para que `git gui` fique listada +LINUX podemos criar um *alias* (criar e editar adequadamente um +arquivo em */usr/share/applications*) para que a `git gui` fique listada junto as aplicações do sistema. --Descobrir no MAC se `git gui` fica no lançador automaticamente. Porém, de forma geral, independente da -plataforma de trabalho `git gui` pode ser iniciada a partir de um +plataforma de trabalho, a `git gui` pode ser iniciada a partir de um terminal `bash`, com o comando: ```sh @@ -75,7 +71,7 @@ git gui ``` Para exemplificar a utilização desta interface vamos alterar alguns -arquivos do repositório `meu1repo`, criado no capÃtulo 2. +arquivos do repositório `meu1repo`, criado no capÃtulo 3. @@ -103,52 +99,52 @@ Após as alterações a interface gráfica é chamada.  FIGURA: Inteface `git gui` -A interface `git gui` se apresenta de forma bem simples, o que facilita +A interface `git gui` se apresenta de forma simples, o que facilita sua utilização. Na figura ?? detacamos as quatro áreas que compreendem a interface. Na primeira porção temos listados os arquivos presentes no *working directory*, os arquivos criados aparecem com Ãcone em branco e -os modificados com linhas em azul. E aqui a interface implementa +os modificados com linhas em azul, aqui a interface implementa interativamente o comando `git add`, pois ao clicar no Ãcone de um arquivo ele é automaticamente adicionado à *staging area*. Na segunda parte são listados os arquivos na *staging area* com Ãcone de *check -mark*. Na terceira parte destacada temos a implementação do comando -`git diff` para qualquer arquivo selecionado. Com destaque de cores a -interface apresenta em vermelho as deleções e verde as adições. Por fim +mark*. Na terceira parte temos a implementação do comando +`git diff` para qualquer arquivo selecionado. Com destaque de cores, a +interface apresenta em vermelho as deleções e em verde as adições. Por fim temos no canto inferior direito a área para escrever *commits* com botões para submissão de ação. Um detalhe importante do `git gui` é que o idioma do sistema operacional é verificado para sua construção, ou seja, os botões da interface na figura ?? são *push*, *commit*, *sign off*, etc pois o idioma do sistema operacional em que essa interface foi -executado é o inglês. Para português (Brasil) as mensagem ficam ..... +executada é o inglês. Para português (Brasil) as mensagens ficam ..... Além das quatro áreas principais da interface, que facilitam interativamente atividades como `git status`, `git diff`, `git add`, `git commit` e `git push`, temos mais implementações no menu da interface para procedimentos não cotidianos. Essas implementações podem -ser acessadas com um simples clique, e são bem auto-explicativas. +ser acessadas com um simples clique e são auto-explicativas. -### gitk ### +## gitk ## -Pioneira dentre as interfaces gráficas para GIT, `gitk` foi a primeira -*GUI* implementada pra GIT. Também implementada em *Tcl/Tk* esta *GUI* -tem como objetivo a apresentação do histórico de um projeto GIT. `gitk` -é incorporado ao principal repositório do GIT, portanto nas instalações -completas do GIT esta interface já fica disponÃvel sem ser necessário +Pioneira dentre as interfaces gráficas, `gitk` foi a primeira +*GUI* implementada. Também implementada em *Tcl/Tk*, esta *GUI* +tem como objetivo a apresentação do histórico de um projeto. A `gitk` +é incorporada ao principal repositório do GIT, portanto nas instalações +completas do GIT esta interface fica disponÃvel sem ser necessário download e instalação. Nesta seção apresentamos a `gitk` detalhando a disposição dos elementos nesta interface que se mostra muito útil na visualização de projetos GIT. -`gitk` trabalha em conjunto com a `git gui`. Em `git gui` podemos fazer +A `gitk` trabalha em conjunto com a `git gui`. Em `git gui` podemos fazer alterações de forma rápida e visual nos arquivos que estão na *staging area* e *working directory*, porém para visualizar o histórico completo -de *commits*, com ramificações, marcações e demais detalhes, recorremos +de *commits* com ramificações, marcações e demais detalhes, recorremos à `gitk`. Essa interface se mostra muito útil também como ferramenta de aprendizagem GIT, uma vez que visualizar de forma gráfica as alterações que os comandos realizados causam no projeto, torna mais fácil a compreensão dos mesmos. `gitk`, assim como a `git gui` pode ser chamada atráves de linha de -comando. +comando: ```sh gitk @@ -156,21 +152,21 @@ gitk Para exemplificar a disposição dos elementos nesta interface, seguimos com as alterações feitas na seção anterior, lembrando que temos todas as -alterações já realizadas no capÃtulo 2 e ainda duas modificações e uma +alterações já realizadas no capÃtulo 3 e ainda duas modificações e uma inclusão de arquivos não *commitadas*. Visualizando a interface `gitk` chamada neste estado do repositório temos:  FIGURA: Inteface `gitk` -Perceba na figura ?? que esta interface é bem mais completado que a `git -gui`, no que diz respeito à informação. Divida em apenas duas partes a +Perceba na figura ?? que esta interface é bem mais completa do que a `git +gui` no que diz respeito à informação. Dividida em apenas duas partes, a `gitk` apresenta na primeira todo o histórico do projeto, é uma implementação visual e agradável do comando `git log --graph`. No -gráfico apresentado as bolinhas azuis representam *commits* passados, a -amarelo indica o estado atual do repositório e em vermelho são as -modificações no *working directory* ao lado estão os autores dos -respectivos *commits* e o momento em que foram feitos. Na parte +gráfico apresentado na parte superior, as bolinhas azuis representam +*commits* passados, a de amarelo indica o estado atual do repositório e +em vermelho são asmodificações no *working directory*. Ao lado estão os +autores dos respectivos *commits* e o momento em que foram feitos. Na parte inferior da interface temos o detalhamento do *commit* selecionado na parte superior. As informações contidas aqui vão desde o identificador do *commit* (*SHA1 ID*), diferença das modificações @@ -178,11 +174,11 @@ referenciadas por este *commit* com relação ao estado anterior do repositório até a listagem dos arquivos atingidos pelo *commit* selecionado. -Além da exelente apresentação visual do repositório GIT, `gitk` também -permite algumas alterações. Clicando com o botão direito de seu *mouse* -em qualquer *commit* listado podemos criar *tags*, reverte o repositório -neste estado, criar um ramo a partir do *commit* dentre outras opções -possÃveis atráves da interface. +Além da excelente apresentação visual do repositório GIT, a interface +`gitk` também permite algumas alterações. Clicando com o botão direito de +seu *mouse* em qualquer *commit* listado podemos criar *tags*, reverter o +repositório neste estado, criar um ramo a partir do *commit* dentre outras +opções possÃveis atráves da interface. `gitk` é uma implementação em *Tcl/Tk* para visualização de repositórios GIT. Com o mesmo objetivo outras interfaces gráficas foram @@ -190,20 +186,20 @@ implementadas. Podemos destacar duas delas pela grande similaridade à -`gitk`, são elas `gitg` e `gitx`. Ambas +`gitk`, são elas `gitg` e `gitx`. Ambas podem ser instalar em: * https://git-scm.com/docs/gitk * https://lostechies.com/joshuaflanagan/2010/09/03/use-gitk-to-understand-git/ -### Outras Interfaces ### +## Outras Interfaces ## -#### gitg e gitx #### +### gitg e gitx ### -Estas duas interfaces tentam juntar em uma única as opções -proporcionadas pela `git gui` e pela `gitk`. Os layouts são muito -similares e as propostas também a diferença está na portabilidade. -`gitg` é implementada em *GTk+* e está disponÃvel para sistemas LINUX e -`gitx` foi implementado para Mac OS seguindo o estilo de aplicativos +Estas duas interfaces tentam juntar em uma única as opções proporcionadas +pela `git gui` e pela `gitk`. Os layouts e as propostas são similares, a +diferença está na portabilidade. +A `gitg` é implementada em *GTk+* e está disponÃvel para sistemas LINUX e a +`gitx` foi implementada para Mac OS seguindo o estilo de aplicativos deste sistema operacional. De forma geral não há detalhes a serem repassados sobre estas interfaces uma vez que as possibilidades já foram listadas nas seções sobre `git gui` e `gitk` @@ -214,11 +210,11 @@ FIGURA: Interface `gitg`  FIGURA: Interface `gitx` -#### RabbitVCS #### +### RabbitVCS ### *RabbitVCS* é uma coleção de ferramentas gráficas para navegadores de - arquivos dos sistemas LINUX que permitem o acesso simples e direto aos - sistemas de controle de versão, GIT e/ou Subversion. Não se caracteriza + arquivos do sistema LINUX que permitem o acesso simples e direto aos + sistemas de controle de versão GIT e/ou Subversion. Não se caracteriza como interface, porém altera a visualização no navegador de arquivos de diretórios sob versionamento GIT além de dispor de ações implementadas nas opções do menu quando pressionado o botão direito do mouse. @@ -230,83 +226,91 @@ Na figura ?? temos o *screenshot* do repositório `meu1repo` no navegor de arquivos `nautilus` (padrão do sistema Ubuntu 14.04). Perceba que com essa interface os Ãcones de arquivos e pastas no navegador ganham destaque com um outro pequeno Ãcone na paste inferior. Estes pequenos -Ãcones indicam o estado do arquivo sem precisar recorrerao terminal, ou +Ãcones indicam o estado do arquivo sem precisar recorrer ao terminal, ou seja, temos um `git status` no próprio navegador de arquivos. Além disso `RabbitVCS` complementa o menu de opções acessados com o botão direito -do mouse. As opções implementadas neste menu são muito completas, vão -desde simples *commits*, criação de *branchs* e *tags* até a ações de +do mouse. As opções implementadas neste menu são completas, vão +desde *commits*, criação de *branchs* e *tags* até a ações de reverter o estado do repositório. -#### git-cola #### +### git-cola ### Esta também é uma interface alternativa que se destaca por ser completa e pela portabilidade (disponÃvel para sistema LINUX, Windows e -Mac. Implementada em *python* `git-cola` é uma alternativa à `git gui` -e contém praticamente os mesmo elementos para alterações no -repositório. Como `git gui` se auxilia da `gitk` para visualização, -`git-cola` também tem uma interface de apoio, chamada de `git-dag` que +Mac). Implementada em *python*, `git-cola` é uma alternativa à `git gui` +e contém praticamente os mesmos elementos para alterações no +repositório. Como a `git gui` se auxilia da `gitk` para visualização, +a `git-cola` também tem uma interface de apoio, chamada de `git-dag` que vem instalado junto ao `git-cola`.  FIGURA: Interface `git-cola` e `git-dag` -Perceba pela figura ?? que as opções das interfaces são muito similares +Perceba pela figura ?? que as opções das interfaces são similares as apresentadas em `git gui` e `gitk`. As interfaces `git-cola` e `git-dag` se destacam pela fácil manipulação do layout exibido, além de -buscar deixar a interface o mais intuitiva possÃvel. Como destaque em -implementação de funcionalidade GIT, `git-cola` se sobresai com relação +buscar deixar a interface mais intuitiva possÃvel. Como destaque em +implementação de funcionalidade GIT, a `git-cola` se sobressai com relação à `git gui` na possibilidade de execução do comando `git rebase` via interface. -#### Plugins e extensões para editores #### +### Plugins e extensões para editores ### -Muitas vezes é inconveniente trabalhar em códigos fonte em um editor e +Muitas vezes é inconveniente trabalhar com códigos fonte em um editor e ter que abrir um terminal *bash* em outra janela do sistema operacional -para verificar o sistema versionamento, realizar commits, +para verificar o sistema de versionamento, realizar commits, etc. Felizmente alguns editores possuem um sistema **GIT** integrado, -seja por meio de *plugins* adicionais instalados ou opção nativa do +seja por meio de *plugins* adicionais instalados ou pela opção nativa do editor. -Destacamos aqui três editores, comumente utilizados pela comunidade +Destacamos aqui dois editores, comumente utilizados pela comunidade estatÃstica, que possuem os comandos **GIT** intergrado à sua -interface. São eles o `emacs`, onde temos as opções de *buffers* no -editores onde podemos abrir uma isntância *shell* e executar os comandos +interface. São eles, o `emacs`, o qual temos as opções de *buffers* nos +editores onde podemos abrir uma instância *shell* e executar os comandos **GIT** junto com o desenvolvimento do código fonte. Além disso uma -extensão bastante poderosa está disponÃvel e em desenvolvimento para o -**GIT** no `emacs`, de nome `magit`[^magit] esta extensão proporciona -opções de comandos e visualização em um *buffer* do editor que facilitam -muito o trabalho de verisionamento. Outro editor também muito utilizado -em EstatÃstica, talvez o mais utilizado pela comunidade, é o RStudio que -também implementa em sua interface vários comandos **GIT**, assim como -as interfaces anterioremente descritas e de para tarefas não triviais -uma chamada do terminal *Shell* é possÃvel dentro do aplicativo. As -diversas ferramentas do editor RStudio serão exploradas no capÃtulo ??, -com exemplos e ilustrações voltadas para a comunidade estatÃstica. - -## Interfaces de comparação ## - -Interfaces para auxÃlio na comparação de arquivos, não são exclusivas -para **GIT**, mas seu uso é intensificado em projetos versionados e/ou -colaborativos onde arquivos de diferentes versões precisam ser -comparados. - -Para o **GIT** estas ferramentas de comparação são de utilidade na -visualização das alterações nas diferentes versões de um arquivo e -também quando se trabalha colaborativamente, onde no momento de mesclar -as contribuições de vários autores, pode ocorrer conflito e nessas horas -a possibilidade visualizar as linhas conflitantes lado a lado é de -grande valia. - -### Meld ### - -* Download e Instalação -* Utilização básica -* Utilização no **GIT** como `difftool` e/ou `mergetool` -* screenshots - -### Outras interfaces ### +extensão poderosa chamada `magit`[^magit] está disponÃvel e em +desenvolvimento para o **GIT** no `emacs`, esta extensão proporciona +opções de comandos e visualização em um *buffer* do editor que facilita +o trabalho de versionamento. Outro editor também muito utilizado em +EstatÃstica, talvez o mais utilizado pela comunidade, é o RStudio que +também implementa em sua interface vários comandos, assim como as +interfaces anteriormente descritas e para tarefas não triviais uma +chamada do terminal *Shell* é possÃvel dentro do aplicativo. As diversas +ferramentas do editor RStudio serão exploradas no capÃtulo ??, com +exemplos e ilustrações voltadas para a comunidade estatÃstica. + +# Interfaces de comparação # + +Uma das principais vantagens do **GIT** é a possibilidade de trabalho +paralelo por dois ou mais usuários ou por ramos de desenvolvimento. E +como qualquer desenvolvimento paralelo, desejamos ao final do trabalho, +mesclar as contribuições realizadas lado a lado. Como vimos no capÃtulo +3 isso é feito através do comando `git merge ramo_desenvolvimento` para ramos +locais e com o comando `git push origin` quando estamos trabalhando em +equipe e as contribuições são enviadas para um servidor remoto, capÃtulo +4. Porém, quando a mesma porção de um mesmo arquivo é alterada em duas +instâncias distintas (ramos diferentes, usuários diferentes etc.) ocorrem +conflitos e vimos como o **GIT** os sinaliza para que possamos resolvê-los. +Nesta seção mostraremos as interfaces gráficas dedicadas à resolução de +conflitos no mesclagem e a visualização da diferença de arquivos em +estados diferentes do repositório. + +## Ferramentas de Comparação Padrão ## + +* meld + + Download e Instalação + + Utilização básica + + Utilização no **GIT** como `difftool` e/ou `mergetool` + + screenshots * kdiff3 + + Download e Instalação + + Utilização básica + + Utilização no **GIT** como `difftool` e/ou `mergetool` + + screenshots + +## Outras interfaces ## + * P4Merge Citar materiais de referência para instalação e