diff --git a/cap06.Rmd b/cap06.Rmd index e1627a9ec5a827c762e55b29ca8b784d963a7ebf..0eca071330e876f1831279791f942be5611f17f6 100644 --- a/cap06.Rmd +++ b/cap06.Rmd @@ -65,10 +65,11 @@ 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 instalação. A interface é voltada para realizar alterações no -repositório. `git gui` permite a realização de diversas modificações no -repositório, desde as mais simples como *commitar* arquivos até 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). +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. `git gui`, no Windows, pode ser aberto pelo menu iniciar. Nesta plataforma, ao instalar o GIT (conforme visto no capítulo 2) duas @@ -76,9 +77,9 @@ 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 junto as aplicações do sistema. --Descobrir no MAC se `git gui` fica no -lançador automaticamente. De forma geral, independente da plataforma de -trabalho `git gui` pode ser iniciada a partir de um terminal `bash`, com -o comando: +lançador automaticamente. Porém, de forma geral, independente da +plataforma de trabalho `git gui` pode ser iniciada a partir de um +terminal `bash`, com o comando: ```sh git gui @@ -176,10 +177,6 @@ Mais um arquivo criado" > OTHER.txt Após as alterações a interface gráfica é chamada. -```sh -git gui -``` -  FIGURA: Inteface `git gui` @@ -204,31 +201,164 @@ executado é o inglês. Para português (Brasil) as mensagem 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. +interface para procedimentos não cotidianos. Essas implementações podem +ser acessadas com um simples clique, e são bem auto-explicativas. + +### 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 +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 +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 +à `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. + +```sh +gitk +``` -### gitk (Tcl/Tk) / gitg (Gtk) / gitx (MacOS) ### +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 +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 +`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 +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 +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. + +`gitk` é uma implementação em *Tcl/Tk* para visualização de repositórios +GIT. Com o mesmo objetivo outras interfaces gráficas foram +implementadas. + + +Podemos destacar duas delas pela grande similaridade à +`gitk`, são elas `gitg` e `gitx`. Ambas * https://git-scm.com/docs/gitk * https://lostechies.com/joshuaflanagan/2010/09/03/use-gitk-to-understand-git/ ### Outras Interfaces ### -Citar materiais de referência para instalação e utilização. -Interfaces a serem comentadas: - -* RabbitVCS (Linux/Unix) -* GitHub (MacOS e Windows) -* git-cola -* Smart-Git - -Escolhidas por serem multiplataforma (Windows, Linux/Unix e MacOS) - -Plugins e extensões, comentar a utilização do **GIT** em editores já -utilizados pela comunidade estatística. - -* Emacs (`magit`) -* RStudio -* Gedit +#### 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 +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` + + +FIGURA: Interface `gitg` + + +FIGURA: Interface `gitx` + +#### 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 + 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. + + +FIGURA: Navegador *Nautilus* com uso do `RabbitVCS` + +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 +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 +reverter o estado do repositório. + +#### 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 +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 +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 +à `git gui` na possibilidade de execução do comando `git rebase` via +interface. + +#### Plugins e extensões para editores #### + +Muitas vezes é inconveniente trabalhar em 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, +etc. Felizmente alguns editores possuem um sistema **GIT** integrado, +seja por meio de *plugins* adicionais instalados ou opção nativa do +editor. + +Destacamos aqui três 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 +**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 ## @@ -263,3 +393,5 @@ utilização. ```{r, engine = "bash", include = FALSE, eval = FALSE} sudo rm -R meu1repo ``` + +[^magit]: http://magit.vc/ diff --git a/images/git-cola.png b/images/git-cola.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c69bc839558059054cbbdbd36e41b9f3ac5d8c Binary files /dev/null and b/images/git-cola.png differ diff --git a/images/git-gui1.png b/images/git-gui1.png index d99a204a2e62511499e9a8019c80cd83f62c2826..beeb7ea9d08f55bd0ef17f7fe2c068547607ede6 100644 Binary files a/images/git-gui1.png and b/images/git-gui1.png differ diff --git a/images/gitg.png b/images/gitg.png new file mode 100644 index 0000000000000000000000000000000000000000..77b0c785da0a8e5144b913dd09e78c8aeb60164b Binary files /dev/null and b/images/gitg.png differ diff --git a/images/gitk1.png b/images/gitk1.png new file mode 100644 index 0000000000000000000000000000000000000000..3e714cfe1dee6f201e8caed55987b26cb55fce9b Binary files /dev/null and b/images/gitk1.png differ diff --git a/images/gitx.png b/images/gitx.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6268998334686894437166cb6e26acdd93ef53 Binary files /dev/null and b/images/gitx.png differ diff --git a/images/rabbitvcs.png b/images/rabbitvcs.png new file mode 100644 index 0000000000000000000000000000000000000000..a5cae4e5dad47a999fec2773faaa0489fb7f800f Binary files /dev/null and b/images/rabbitvcs.png differ