From 25cdeb89727a76ebcd5808cc85ccf5208c2b0192 Mon Sep 17 00:00:00 2001 From: Knight Rider <batman@justiceleague.org> Date: Mon, 14 Dec 2015 15:32:36 -0200 Subject: [PATCH] Revisa e adiciona o cap3. --- apostila_git.tex | 4 +- cap03.Rmd | 143 ++++++++++++++++++++++------------------------- 2 files changed, 71 insertions(+), 76 deletions(-) diff --git a/apostila_git.tex b/apostila_git.tex index b2a642a..8dba8b7 100644 --- a/apostila_git.tex +++ b/apostila_git.tex @@ -243,7 +243,9 @@ \chapter{Instalação e Configuração} \input{cap02.tex} -% \input{cap03.tex} +\chapter{Repositórios Locais} +\input{cap03.tex} + % \input{cap04.tex} % \chapter{Serviços Web para Projetos Git} % \input{cap05.tex} diff --git a/cap03.Rmd b/cap03.Rmd index 1f5611c..a0c9ddf 100644 --- a/cap03.Rmd +++ b/cap03.Rmd @@ -1,11 +1,11 @@ --- -title: 'Capítulo 3: Repositório Local' -author: +title: "Repositórios Locais" +author: "PET Estatística UFPR" date: "15/12/2015" graphics: yes output: pdf_document: - template: template.tex + template: highlight: default toc: true toc_depth: 2 @@ -13,28 +13,27 @@ output: number_sections: true --- - ```{r, include=FALSE} library(knitr) opts_chunk$set(comment=NA) ``` -\chapter{Repositório Local} - -### Instruções do Git +# Instruções do Git # Neste capítulo, as instruções serão todas feitas no terminal mesmo que existam alternativas gráficas para as mesmas. Isso enfatiza no que está sendo feito além do fato de que no terminal todos devem ter os mesmos recursos e os comandos irão produzir os mesmos resultados, o que faz -esse tutorial algo reproduzível. Casos você queira usufruir das ferramentas gráficas vá para o capítulo 6. +esse tutorial algo reproduzível. Casos você queira usufruir das +ferramentas gráficas vá para o capítulo 6. -Sabendo que você executou os comandos de perfil que no capítulo anterior, temos o Git devidamente configurado, com credenciais (nome e e-mail) e -configurações aplicadas. Vamos então ver como o sistema de controle de -versão acontece. +Sabendo que você executou os comandos de perfil que no capítulo +anterior, temos o Git devidamente configurado, com credenciais (nome e +e-mail) e configurações aplicadas. Vamos então ver como o sistema de +controle de versão acontece. ```{r, engine = "bash"} -# Apenas verificando o cadastro +## Apenas verificando o cadastro. git config user.name "Knight Rider" git config user.email "batman@justiceleague.org" ``` @@ -71,12 +70,10 @@ ls -a ``` - ```{r, engine="bash"} cd meu1repo ## Diretório de teste de comandos ``` - ```{r, engine="bash", echo=-c(1:2), eval=FALSE} cd meu1repo @@ -94,7 +91,7 @@ cd meu1repo git help -a ``` -### Meu Primeiro Repositório +# Meu Primeiro Repositório # ```{r, engine="bash", echo=-c(1:2)} cd meu1repo @@ -117,7 +114,7 @@ estrutura. cd meu1repo ## Mostra todo conteúdo do diretório. -tree -a +tree --charset=ascii -a ``` **NOTA**: o `tree` é um programa instalado a parte (*third party @@ -132,7 +129,7 @@ enfoque está no funcionamento, não haverá prejuízo. Vamos criar o arquivo com conteúdo também pelo terminal. Se você preferir, abra eu editor de texto favorito (Emacs, Gedit, Geany, -RStudio, Bloco de Notas, Notepad++, etc) e faça algo mais criativo. +RStudio, Bloco de Notas, Notepad++, etc) e faça algo mais criativo. ```{r, engine="bash", echo=-c(1:2)} cd meu1repo @@ -141,7 +138,7 @@ cd meu1repo echo "Meu primeiro repositório Git" > README.txt ## Lista os arquivos do diretório. -tree +## tree --charset=ascii ``` ```{r, engine="bash", echo=-c(1:2)} @@ -154,15 +151,15 @@ git status E o que o Git "acha" de tudo isso? O comando *status* é o mais usado do Git, principalmente nas etapas de aprendizado. Uma característica diferente do Git, se comparado a outras aplicações de uso por terminal, -é que ele é realmente camarada. Nas mensagens de *output*, o Git -informa o que aconteceu e também sugere o que fazer. +é que ele é realmente camarada. Nas mensagens de *output*, o Git informa +o que aconteceu e também sugere o que fazer. Este diretório agora é um diretório sob versionamento Git, portanto todas as alterações realizadas serão observadas pelo sistema. Ao -criarmos o arquivo e pedirmos a situação (*status*), o Git indica que -existe um arquivo não rastreado (*untracked*) no diretório. Inclusive -sugere uma ação que seria adicionar o aquivo (*add*). Se o seu sistema -operacional está em português, parte dos outputs do Git podem estar +criarmos o arquivo e pedirmos a situação (*status*), o Git indica que +existe um arquivo não rastreado (*untracked*) no diretório. Inclusive +sugere uma ação que seria adicionar o aquivo (*add*). Se o seu sistema +operacional está em português, parte dos outputs do Git podem estar traduzidos. \begin{figure} @@ -173,13 +170,14 @@ traduzidos. \label{fig:cap03_pversion} \end{figure} -De forma geral temos 3 estágios \ref{fig:cap03_pversion} de arquivos considerados no sistema de -controle de versionamento Git. São eles *working directory*, *Staged -Area* e *Committed*, os discutiremos ao logo do texto. Todo arquivo -criado em um diretório versionado deve necessariamente passar pelos três -estágios. Voltando para a nossa situação temos o arquivo `README.txt` -criado e atualmente ele está no estágio *working directory*, faremos -todo o procedimento para que chegue ao estágio *committed*. +De forma geral temos 3 estágios \ref{fig:cap03_pversion} de arquivos +considerados no sistema de controle de versionamento Git. São eles +*working directory*, *Staged Area* e *Committed*, os discutiremos ao +logo do texto. Todo arquivo criado em um diretório versionado deve +necessariamente passar pelos três estágios. Voltando para a nossa +situação temos o arquivo `README.txt` criado e atualmente ele está no +estágio *working directory*, faremos todo o procedimento para que chegue +ao estágio *committed*. Alterações em arquivos no *working directory* não são armazenadas, por isso o sugestivo nome "diretório de trabalho". Portanto, para que o @@ -222,21 +220,20 @@ consultadas quando você precisar desfazer/voltar. Ela deve ser curta (<= 72 caracteres) e ao mesmo tempo informativa. A minha primeira mensagem não será, todavia. - Boas Práticas de commit: \begin{itemize} -\item Verbo no indicativo} -\item Frases curtas -\item Dizer o que fez e não como fez + \item Verbo no indicativo + \item Frases curtas + \item Dizer o que fez e não como fez \end{itemize} Evite mensagens de commit como: \begin{itemize} -\item "Modificações realizadas" -\item "Trabalhei muito hoje" -\item "Terminando este trabalho na madruga" + \item "Modificações realizadas" + \item "Trabalhei muito hoje" + \item "Terminando este trabalho na madruga" \end{itemize} ```{r engine="bash", echo =-c(1:2)} @@ -256,7 +253,7 @@ projeto. São mostrados apenas os 7 primeiros dígitos porque são suficientes para diferenciar *commits*, seja de projetos pequenos ou até mesmo de projetos moderados ou grandes. -### Complementos +# Complementos # Para o registro de desenvolvimento, existe marcação por tags, que seriam commits especiais, geralmente usado para marcar pontos de @@ -278,10 +275,12 @@ git tag git tag -d versao1 ``` -Caso haja mudança no nome do arquivo que você esteja versionado, deve ser alterado pelo próprio git, para que fique no atual estágio de versionamento. +Caso haja mudança no nome do arquivo que você esteja versionado, deve +ser alterado pelo próprio git, para que fique no atual estágio de +versionamento. ```{r, engine = "bash", eval = FALSE} -# git mv antigo novo +## git mv antigo novo git mv -f README.txt LEIAME.txt ``` @@ -291,7 +290,7 @@ Caso você queira excluir o arquivo git rm README.txt ``` -## Versões de Arquivos Diferentes +# Versões de Arquivos Diferentes # Vamos criar mais arquivos e acrescentar conteúdo ao já rastreado pelo Git para percebermos o funcionamento. Escrever uma lista de razões para @@ -369,7 +368,6 @@ cd meu1repo git diff ``` - Vamos aplicar o primeiro *add* ao `porqueLinux.txt` para que ele começe a ser versionado. Perceba que ao adicioná-lo, as mudanças, no caso a criação do arquivo com contúdo, já são separadas para receber registro @@ -421,8 +419,8 @@ git commit -m "Adiciona frase do Linux Torvalds." ``` Agora temos 3 *commits* e o *log* apresenta os *sha1* e as mensagens -correspondentes aos mesmos. Com `--oneline` resumimos o *output* mostrando -apenas o *sha1* e a mensagem de *commit*. +correspondentes aos mesmos. Com `--oneline` resumimos o *output* +mostrando apenas o *sha1* e a mensagem de *commit*. ```{r, engine="bash", echo=-c(1:2)} cd meu1repo @@ -435,21 +433,19 @@ modificações entre dois *commits*, não necessariamente consecutivos, por exemplo. Também podemos retroceder (*checkout*, *reset*, *revert*) o projeto para alguns desses pontos. - ```{r, engine="bash", echo=-c(1:2)} cd meu1repo git diff HEAD@{1} ``` -Instruímos o Git mostrar as diferenças para um *commit* atrás. A -cabeça (*HEAD*) é o que se entende como estado mais recente. Usa-se o -termo *HEAD* (cabeça) pois considera-se um crescimento do histórico -debaixo para cima no qual um novo *commit* é colocado em cima dos demais +Instruímos o Git mostrar as diferenças para um *commit* atrás. A cabeça +(*HEAD*) é o que se entende como estado mais recente. Usa-se o termo +*HEAD* (cabeça) pois considera-se um crescimento do histórico debaixo +para cima no qual um novo *commit* é colocado em cima dos demais (empilhado). O `HEAD@{0}` ou apenas `HEAD` representa o último registro feito. Não é necessário escrever o último `HEAD` na intrução abaixo. - Agora inspecionado uma distância de 2 *commits* a partir do último. Aqui tem-se os dois arquivos envolvidos nesse intervalo de 2 *commits*. Com `--name-only` retorna-se só o nome dos arquivos. @@ -557,8 +553,8 @@ git status ``` O `diff` vazio compara o diretório de trabalho com o último registro -(último *commit*). Quando você usa explicitamente na instrução `HEAD@{ }` -seguido de número, então estão sendo comparadas versões +(último *commit*). Quando você usa explicitamente na instrução `HEAD@{ +}` seguido de número, então estão sendo comparadas versões "commitadas". Existem variantes de sufixo para usar no `HEAD` que são: * `HEAD@{n}` @@ -627,15 +623,16 @@ cd meu1repo git blame README.txt ``` -## Trabalhando com Ramos +# Trabalhando com Ramos # -Existem várias formas de se trabalham com ramos veja a figura \ref{fig:cap03_work}. Geralmente os ramos são feitos sob demandas para adicionar uma característica ao projeto -(*feature*) ou corrigir um *bug*. Alguns ramos, por outro lado, são -ramos fixos destinados a receber o desenvolvimento dos ramos de -demanda. Esses ramos são geralmente chamados de *devel* (*development*) -e *release*. O ramo *master* é o default e em geral, para projetos -grandes, o *master* só recebe versões funcionais do projeito, livre de -bugs. +Existem várias formas de se trabalham com ramos veja a figura +\ref{fig:cap03_work}. Geralmente os ramos são feitos sob demandas para +adicionar uma característica ao projeto (*feature*) ou corrigir um +*bug*. Alguns ramos, por outro lado, são ramos fixos destinados a +receber o desenvolvimento dos ramos de demanda. Esses ramos são +geralmente chamados de *devel* (*development*) e *release*. O ramo +*master* é o default e em geral, para projetos grandes, o *master* só +recebe versões funcionais do projeito, livre de bugs. \begin{figure} \begin{center} @@ -700,7 +697,8 @@ partir do ramo que é seu ancestral, ou seja, ele começa a partir do commitar. O comando `wget` permite baixar arquivos pelo terminal. Será baixado um arquivo com um função para calcular o fator de inflação de variância (*vif*, variance inflation factor) usado em modelos de -regressão, disponível na página da Professora Suely Giolo. [\footnote{\url{http://people.ufpr.br/~giolo/CE071/Exemplos/vif.R}} +regressão, disponível na página da Professora Suely +Giolo\footnote{\url{http://people.ufpr.br/~giolo/CE071/Exemplos/vif.R}}. ```{r, engine="bash", include=FALSE} ## Tenta ir para o diretório downloads, se não conseguir é porque não @@ -772,7 +770,7 @@ git commit -m "Adiciona função R para VIF." cd meu1repo ## Estrutura do diretório. -tree +tree --charset=ascii ``` ```{r, engine="bash", echo=-c(1:2)} @@ -804,7 +802,7 @@ git checkout master cd meu1repo ## Estrutura do diretório. -tree +tree --charset=ascii ``` O arquivo `vif.R` não sumiu. Ele está no ramo `feature01` e só passará @@ -843,11 +841,9 @@ cd meu1repo git log --oneline ``` -É possível criar um ramo a partir de um *commit* ancestral ao atual. Isso -é extremamente útil para resolver os bugs. Vamos fazer um segundo ramo a -partir do *commit* anterior a inclusão do arquivo R. - - +É possível criar um ramo a partir de um *commit* ancestral ao +atual. Isso é extremamente útil para resolver os bugs. Vamos fazer um +segundo ramo a partir do *commit* anterior a inclusão do arquivo R. ```{r, engine="bash", echo=-c(1:2)} cd meu1repo @@ -960,7 +956,7 @@ else cd downloads fi -## Se não existir o aquivo pimentel_racoes.txt, então baixar da internet. +## Se não existir o aquivo pimentel_racoes.txt, então baixe da internet. if [ ! -f pimentel_racoes.txt ] then echo "Arquivo pimentel_racoes.txt não existe. Baixando..." @@ -1177,11 +1173,10 @@ git log --graph --oneline --decorate --date=relative --all ```{r, engine="bash", echo=-c(1:2)} cd meu1repo -tree +tree --charset=ascii ``` -**** -## Resolvendo conflitos +# Resolvendo conflitos # Agora vamos de propósito mostrar uma situação em que não é possível fazer o merge automaticamente. Vamos criar um conflito. Para isso vou @@ -1416,8 +1411,6 @@ cd meu1repo git status ``` - - ```{r, engine="bash", echo=-c(1:2)} cd meu1repo # Fluxo de trabalho do repositório criado -- GitLab