diff --git a/cap08/cap08_er.Rmd b/cap08/cap08_er.Rmd index d546e7099bd1b4667dd0b943a7b98b8d270b170f..4858609a273f118a15b17d37f96c68f467676c4e 100644 --- a/cap08/cap08_er.Rmd +++ b/cap08/cap08_er.Rmd @@ -1,7 +1,10 @@ ---- + --- title: "Exemplos de Rotina" author: "PET EstatÃstica UFPR" graphics: yes +header-includes: + \usepackage{multicol} + \usepackage{cleveref} output: pdf_document: template: ../template.tex @@ -14,111 +17,407 @@ output: \appendix -\chapter{Exemplos de Rotinas Git} +\chapter{Exemplos de Rotinas} Neste apêndice são descritas brevemente algumas das rotinas mais usuais -em projetos sob sistema de versionamento Git. A maioria dos exemplos -foram apresentados no decorrer da apostila e estão resumidos neste -coletânea. +em projetos Git. A maioria dos exemplos estão detalhados na apostila e +foram resumidos nesta coletânea. Abaixo temos a lista de rotinas aqui +presentes: + +\begin{multicols}{2} +\footnotesize + \begin{description} + \item[Configure usuário e e-mail,] pág. \pageref{routine1} + \item[Inicie um projeto git local,] pág. \pageref{routine2} + \item[Trabalhe com ramos,] pág. \pageref{routine3} + \item[Visualize diferenças,] pág. \pageref{routine4} + \item[Resolva conflitos de \textit{merge},] pág. \pageref{routine5} + \item[Visualize seu projeto,] pág. \pageref{routine6} + \item[Volte versões anteriores,] pág. \pageref{routine7} + \item[Reescreva \textit{commits},] pág. \pageref{routine8} + \item[Adicione chaves públicas,] pág. \pageref{routine9} + \item[Trabalhe remotamente,] pág. \pageref{routine10} + \item[Manipule ramos remotos,] pág. \pageref{routine11} + \item[Adicione local remoto,] pág. \pageref{routine12} + \end{description} +\end{multicols} \pagebreak -\routine{Clonar, Modificar e Subir} +<!-- ------------------------------------------- --> +\hlabel{routine1} +\routine{Configure usuário e e-mail} ```{r, engine='bash', echo=TRUE, eval=FALSE} -# Clonar o projeto desta apostila: -git clone git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git -# Modifique o projeto antes de executar o código abaixo. +## Configurando localmente +## - válido para o repositório atual +git config user.name "Name Lastname" +git config user.email "namelastname@servidor" -# Commitar o projeto: -git commit -a -m "Sua Mensagem de Commit" -# Enviar projeto ao servidor (branch master, servidor origin): -git push origin master +## Configurando globalmente +## - válido para todos os repositórios do computador +git config --global user.name "Name Lastname" +git config --global user.email "namelastname@servidor" + +## Obs.: As configurações locais se sobrepõem as +## globais, quando as duas forem avaliadas. ``` -\routine{Resolver conflito de merge} +<!-- ------------------------------------------- --> +\hlabel{routine2} +\routine{Inicie um projeto Git local} -```{r, engine='bash', eval=FALSE, echo=TRUE} -# Requisitar merge: -git merge ramo_teste +```{r, engine='bash', echo=TRUE, eval=FALSE} -# Resolver conflitos manualmente. +## Em um diretório que deseja-se versionar -# Finalizar merge com o commit: -git commit -a -m "Merge do ramo_teste" +## Inicia o versionamento Git +git init -``` +## Verifica o estado do repositório +git status -\routine{Incorporar o remoto ao local} +## Adicione os arquivos para receber o commit +git add file1.txt file2.R file3.txt file4.Rmd + +## Registre a versão do repositório com uma mensagem +## informativa +git commit -m "Inicia repositório" + +## Verifica o histórico de versões +git log -```{r, engine='bash', eval=FALSE, echo=TRUE} -# Listando os servidores remotos: -git remote -# Adicionando novo remote com nome remoto: -git remote add remoto git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git -# Atualizando arquivos locais: -git pull ``` -\routine{Resolver um bug} +<!-- ------------------------------------------- --> +\hlabel{routine3} +\routine{Trabalhe com ramos} -```{r, engine='bash', eval=FALSE, echo=TRUE} +```{r, engine='bash', echo=TRUE, eval=FALSE} +## Verifica os ramos existentes +git branch + +## Cria um ramo, para trabalho especÃfico como: +## - Corrigir bugs +## - Desenvolver features +## - Tarefas em geral git branch bugfix + +## Altera versionamento para o ramo criado git checkout bugfix -# Modifica o código de acordo com o necessário. +## Adiciona as alterações que corrigem o bug +git add app.R -git commit -a -m "Bug corrigido" +## Registra as alterações +git commit -m "Altera delimitadores da função" + +## Retorna para o ramo principal git checkout master + +## Incorpora ao ramo principal as alterações +## realizados no ramo bugfix git merge bugfix + +## Deleta o ramo responsável pela correção do bug git branch -d bugfix ``` -\routine{Deletar ramos} +<!-- ------------------------------------------- --> +\hlabel{routine4} +\routine{Visualize diferenças} ```{r, engine='bash', echo=TRUE, eval=FALSE} -# Listar ramos: -git branch -# Deletar ramo local: -git branch -d "nome_ramo" -# Deletar ramo remoto: -git push origin :nome_ramo + +## ------------------------------------------- +## Diferenças não commitadas + +## Lista as diferenças entre o último commit e o +## estado do repositório no working directory +git diff + +## Diferença para um único arquivo +git diff file.Rmd + +## ------------------------------------------- +## Diferenças entre versões commitadas + +## Verifica os registros com referência +git reflog + +## Lista as diferenças entre o último e o +## antepenúltimo registro +git diff HEAD~0 HEAD~2 ## ou + +## ------------------------------------------- +## Diferenças entre ramos + +## Lista diferenças entre os ramos master e +## feature1 +git diff master feature1 + +## Obs.: Programas externos podem ser utilizados para +## visualizar diferenças use difftool no lugar de +## diff, ver no cap. 06 + ``` -\routine{Criar ramo de um commit passado} +<!-- ------------------------------------------- --> +\hlabel{routine5} +\routine{Resolva conflitos de merge} -```{r, engine='bash', echo=TRUE, eval=FALSE} -# Verificar código commit: +```{r, engine='bash', eval=FALSE, echo=TRUE} + +## Incorpora modificações realizadas no ramo feature +git merge feature + +## Edite e salve o(s) arquivo(s) em conflito, as +## porções em conflito são destacadas por <<< === >>> + +## Finaliza merge com o commit: +git commit -a -m "Merge do ramo feature" + +``` + +<!-- ------------------------------------------- --> +\hlabel{routine6} +\routine{Visualize seu projeto} + +```{r, engine='bash', eval=FALSE, echo=TRUE} + +## Histórico de registros git log -# Criando branch com commit do código -# ec3650c8661d75b486a236e3d416ab58db1d596a: -git branch novo_branch ec3650c8661d75b486a236e3d416ab58db1d596a -# Mudando para novo_branch -git checkout novo_branch +## Histórico de registros em uma linha com trajetória +## dos ramos +git log --graph --oneline + +## Histórico de registro com referência +git reflog + +## Histórico de registro via interface gráfica padrão +gitk ``` -\routine{Voltar o projeto para um commit} +<!-- ------------------------------------------- --> +\hlabel{routine7} +\routine{Volte versões anteriores} ```{r, engine='bash', echo=TRUE, eval=FALSE} -# Listando commits pelo nome e código de identificação: -git log --pretty=oneline -# Voltando a um commit anterior, em que seu código -#de identificação é: ec3650c8661d75b486a236e3d416ab58db1d596a. -git checkout ec3650c8661d75b486a236e3d416ab58db1d596a +## Verifica o histórico de versões do repositório +## - Guarde o SHA1 ID do registro desejado: ec3650c8 +git log --oneline + +## ------------------------------------------- +## Descartar todas as alterações até um commit +git reset --hard ec3650c8 + +## Obs.: Reescreve a história do repositório, não +## é recomendável reescrever a linha do tempo quando +## se está em um projeto colaborativo remoto. + +## ------------------------------------------- +## Reverte o estado atual para um registro especÃfico +git revert ec3650c8 +git commit -am "Retorna projeto para versão funcional" + +## Obs.: Faz um merge da versão atual com a versão do +## SHA1 ID informado. POdem haver conflitos que devem +## ser resolvido para concluir a reversão. + +## ------------------------------------------- +## Cria um ramo provisório a partir de um SHA1 ID +git checkout ec3650c8 + +## Visualiza os ramos existentes +git branch + +## Cria um ramo denifitivo com o estado no SHA1 ID +git checkout -b ramo_teste + +## Obs.: O ramo provisório é removido assim que se +## fizer um checkout para qualquer outro ramo ``` -\routine{Reescrever mensagem de commit} +<!-- ------------------------------------------- --> +\hlabel{routine8} +\routine{Reescreva commits} ```{r, engine='bash', echo=TRUE, eval=FALSE} + +## Verifica o histórico de versões do repositório git log --oneline -git commit --amend "Correção de Commit" -git push -f origin master + +## ------------------------------------------- +## Reescreve a última mensagem de commit +git commit --amend -m "Correção de Commit" + +## Obs1.: Arquivos na staging area também são +## incorporados ao último commit +## Obs2.: Reescreve a história do repositório, não +## é recomendável reescrever a linha do tempo quando +## se está em um projeto colaborativo remoto. + +``` + +<!-- ------------------------------------------- --> +\hlabel{routine9} +\routine{Adicione chaves públicas} + +```{r, engine='bash', echo=TRUE, eval=FALSE} + +## Crie uma chave pública. +ssh-keygen -t rsa -C "namelastname@servidor" + +## Exibe as chaves públicas. +cat ~/.ssh/id_rsa.pub + +## Adicione o conteúdo a um servidor remoto, como: +## - git@github.com +## - git@gitlab.com +## - git@gitlab.c3sl.ufpr.br + +## Verifica conexão com o servidor +ssh -T endereço ## endereço = git@github.com, ... + +## Obs.: Todos os comandos ssh são provinientes do +## pacote de função ssh para shell, portanto para +## utilizar instale este pacote. + +``` + +<!-- ------------------------------------------- --> +\hlabel{routine10} +\routine{Trabalhe remotamente} + +```{r, engine='bash', echo=TRUE, eval=FALSE} + +## Clona um projeto remoto: +## e.g. git@github.com:pet-estatistica/apostila-git.git +git clone endereço:namespace/project.git + +## Realiza modificações e/ou inclusões de em um ou +## vários arquivos + +## Adiciona todas as alterações para commit +git add . + +## Registra suas alterações +git commit -a -m "Modifica compilação do projeto" + +## Envia as alterações para o repositório remoto (origin) +git push origin + +## Traz estado do repositório remoto +git pull origin + +``` + +<!-- ------------------------------------------- --> +\hlabel{routine11} +\routine{Manipule ramos remotos} + +```{r, engine='bash', echo=TRUE, eval=FALSE} + +## ------------------------------------------- +## Realizando contribuições em um ramo remoto + +## Lista todos os ramos +git branch -a + +## Altera versionamento para o ramo issue01 +git checkout issue01 + +## Traz estado do ramo remoto issue01 +git pull origin issue01 + +## Realiza modificações e/ou inclusões de em um ou +## vários arquivos + +## Adiciona todas as alterações para commit +git add . + +## Registra suas alterações +git commit -a -m "Modifica laço iterativo condicional" + +## Envia as alterações no ramo para a versão remota +git push origin issue01 + +## ------------------------------------------- +## Realizando contribuições em um ramo remoto e +## enviando o ramo principal mesclado + +## Traz estado do ramo remoto issue01 +git pull origin bugfix + +## Altera versionamento para o ramo issue01 +git checkout bugfix + +## Realiza modificações e/ou inclusões de em um ou +## vários arquivos + +## Adiciona todas as alterações para commit +git add . + +## Registra suas alterações +git commit -a -m "Altera classe do objeto retornado" + +## Retorna ao ramo principal +git checkout master + +## Incorpora modificações realizadas no ramo bugfix +git merge bugfix + +## Envia as alterações o repositório remoto +git push origin master + +## Deleta o ramo local e remoto bugfix +git branch -d bugfix ## Local +git push :bugfix ## Remoto + +``` + +<!-- \routine{Incorporar o remoto ao local} --> +<!-- ------------------------------------------- --> +\hlabel{routine12} +\routine{Adicione local remoto} + +```{r, engine='bash', eval=FALSE, echo=TRUE} + +## Lista os servidores remotos, com endereço +git remote -v + +## ------------------------------------------- +## Adicionando local para trazer contribuições + +## Adiciona local remoto com nome gitlab: +git remote add gitlab git@gitlab.com:user/project.git + +## Adiciona local remoto com nome github: +git remote add github git@github.com:user/project.git + +## Atualiza arquivos locais, baseado no local remoto: +git pull gitlab ## gitlab.com:namespace/project.git +git pull github ## github.com:namespace/project.git + +## ------------------------------------------- +## Adicionando local para enviar contribuições + +## Lista os locais de origem +git remote show origin + +## Adiciona novo local de origem: +## e.g. git@github.com:pet-estatistica/apostila-git.git +git remote set-url origin --push --add endereço_remoto + +## Envia as contribuições para os locais remotos +git push origin + ``` diff --git a/cap08/cap08_er.pdf b/cap08/cap08_er.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1d6cf525d9acae514357a18174ed04fe4eaffd52 Binary files /dev/null and b/cap08/cap08_er.pdf differ