diff --git a/cap08/cap08_dt.Rmd b/cap08/cap08_dt.Rmd index 0e7048a683ca20f8f02791ba11f84db9b6ed149d..1dde0fa571a3964db7d39c412d006c5a86d1edc6 100644 --- a/cap08/cap08_dt.Rmd +++ b/cap08/cap08_dt.Rmd @@ -9,10 +9,11 @@ Dicionário de Termos O `config` é um comando usado para ajustar as configurações padrão do git. Há duas configurações básicas a serem feitas: a inclusão do e-mail e do nome do usuário git. -Todas as configurações são globais e ficam armazenadas em um arquivo -chamado `.gitconfig`, que fica localizado no diretório padrão do usuário. +Todas as configurações definidas como globais ficam armazenadas em um +arquivo chamado `.gitconfig`, que fica localizado no diretório padrão +do usuário. -### Exemplo +**Exemplo:** ```{r, engine='bash', eval=FALSE} # Configurando o usuário Ezio Auditore: git config --global user.name "Ezio Auditore" @@ -20,7 +21,22 @@ git config --global user.name "Ezio Auditore" git config --global user.email ezio.auditore@exemple.com ``` -## ssh-keygen +## SSH Key + +É uma chave de autenticação baseada em criptografia de chave pública +(chave assimétrica). Essa criptografia torna o processo transferência +de arquivos entre o cliente e o servidor mais segura. + +Para que o git local consiga se conectar a um servidor git remoto, é +necessário que esta chave seja gerada e que as devidas configurações +sejam feitas tanto localmente quanto no servidor remoto, +caso contrário, é exibido um erro e a conexão é interrompida. + +**Exemplo:** +```{r, engine='bash', eval=FALSE} +# Gerando chave SSH: +ssh-keygen +``` ## Help @@ -28,7 +44,7 @@ git config --global user.email ezio.auditore@exemple.com Todo comando git tem um manual de ajuda que pode ser exibido na tela com o comando `--help`. -### Exemplo +**Exemplo:** ```{r, engine='bash', eval=FALSE} # Exibir ajuda do comando status: git status --help @@ -40,7 +56,7 @@ Um repositório é uma pasta gerenciada pelo git. A partir da criação deste, podemos marcar pontos de mudanças significativas nos arquivos gerenciados, sendo possível transitar entre as diferentes verões a medida do necessário. -### Exemplo +**Exemplo:** ```{r, engine='bash', eval=FALSE} # Iniciar repositório na pasta atual: git init @@ -48,11 +64,27 @@ git init ## Stagin Area -A stagin area é um espaço temporário na pasta gerenciada pelo git, onde ficam os arquivos -antes de ser marcados como uma versão definitiva. Em tradução livre, stagin area -é area de estágio, e podemos imaginar que o arquivo está estagiando antes de +A stagin area é um espaço temporário na pasta gerenciada pelo git. É +aonde ficam os arquivos antes de ser marcados como uma versão definitiva. +Em tradução livre, stagin area é area de estágio, +podemos assim imaginar que o arquivo está estagiando antes de ser promovido a um arquivo definitivo. +## Remote + +O `remote` mostra o servidor remoto aonde o +seus arquivos git estão hospedados. O remote padrão +geralmente é criado com o nome de `origin`, mas +é possível adiciona-lo utilizando outros nomes e +até mesmo adicionar outros servidores remotos juntamente ao `origin`. + +**Exemplo:** +```{r, engine='bash', eval=FALSE} +# Adicionando um servidor remoto com nome origin: +git remote add origin "git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git" +``` + + ## Clone O `clone` é usado quando deseja-se clonar um repositório que está @@ -64,7 +96,7 @@ histórico de controle de versões sem a necessidade de uso da internet. é adicionado automaticamente, podendo ser acessado atravéz do nome `origin`. -### Exemplo +**Exemplo:** ```{r, engine='bash', eval=FALSE} # Clonando o projeto desta apostila: git clone git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git @@ -72,63 +104,63 @@ git clone git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git git remote ``` +## Status + +O status exibe a diferença entre o estado atual dos arquivos e o estado +do ultimo `commit` do mesmo `branch`. São três estados possíveis: +consolidado (committed), modificado (modified) e preparado (staged). + +**Exemplo:** +```{r, engine='bash', eval=FALSE} +# Pedindo o status: +git status +``` + ## Add O `add` adiciona (envia) os arquivos para a stagin area, para que possa ser marcado no tempo por um commit. -### Exemplo +**Exemplo:** ```{r, engine="bash", eval=FALSE} # Adicionar todos os arquivos a stagin area: git add * ``` - -## Commmit +## Commit O `commit` marca os arquivos da stagin area como uma versão definitiva, para que posteriormente, caso algum erro ocorra, possamos voltar para commits anteriores onde o código está em pleno funcionamento. -### Exemplo +**Exemplo:** ```{r, engine="bash", echo=TRUE, eval=FALSE} git commit -m "Meu primeiro commit" ``` ## Branch -Os `branchs` são uma cópia dos arquivos do ultimo commit -para um ambiente de desenvolvimento paralelo, ou seja, -ele cria uma cópia da sua pasta gerenciada, permitindo que as modificações -em um branch não afete os arquivos em outro. Os branchs também são chamados -de ramos de desenvolvimento. +Os `branchs` são como uma cópia dos arquivos do ultimo commit +para um ambiente de desenvolvimento paralelo, o que +permite que as modificações em um `branch` não afete os arquivos em outro. +Os branchs também são chamados de ramos de desenvolvimento. -### Exemplo -```{r, engine='bash', eval=FALSE} +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} # Cria um branch chamado novoBranch git branch novoBranch ``` -## HEAD - ## Checkout -`Checkout` serve para transitar entre branchs e commits. Usando o -checkout é possivel voltar a commits anteriores. - -## Reset - -## Remote - -Remote é utilizado o servidor remoto aonde o -seus os arquivos git estão hospedados. O remote padrão -geralmente é criado com o nome de `origin`, -e é possível adicionar outros remotes utilizando nomes diferentes. +O `checkout` serve para transitar entre branchs e commits. +Usando o checkout é possivel voltar a commits anteriores. -### Exemplo -```{r, engine='bash', eval=FALSE} -git remote add origin "git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git" +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Mudar do branch atual para o branch teste: +git checkout teste ``` ## Merge @@ -143,29 +175,184 @@ quando duas ou mais pessoas modificam a mesma parte do código. Estes conflitos devem ser resolvidos manualmente, deixando a cargo do gerente de projetos decidir que parte do código deve permanecer. -### Exemplo +**Exemplo:** ```{r, engine='bash', eval=FALSE} # Faz merge do branch chamado novoBranch com o branch atual: git merge novoBranch ``` -## Status - ## Rm +O `git rm`, na sua forma mais comum, serve para remover um arquivo de +forma que ele deixe de sergerenciado pelo git e seja excluido do disco +rígido. Também é possível que o arquivo deixe de ser gerenciado +e permaneça no disco. + +Uma das vantagens é que, quando o arquivo é removido pelo `git rm`, ele +já aparece como preparado (staged), precisando somente que +a exclusão seja commitada. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Remover arquivo teste.tex do gerenciamento e do disco: +git rm teste.tex + +# Remover arquivo teste.tex apenas do gerenciamento: +git rm --cached teste.tex +``` + ## Mv -## Stash +O `git mv` move ou renomeia arquivos, informando ao git que eles foram +movidos ou renomeados. -## Tag +Caso a mudança seja feita sem esse comando o git entende que o arquivo +foi deletado e que um novo arquivo foi criado, deixando de fora, +por exemplo, a ligação existente entre o arquivo e seus commits. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Renomeando o arquivo teste.tex para arquivo1.tex: +git mv teste.tex arquivo1.tex +``` + +## Push + +O `push` é usado para "empurrar" os arquivos do repositório local +para o servidor remoto. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Atualizado o branch master (remoto), com o branch atual (local): +git push origin master +``` ## Fetch +O `fetch` busca no repositório remoto os dados e arquivos que +não estão no repositório local. É impostante frisar que o `fetch` não +faz o merge dos arquivos, deixando isso para ser feito manualmente +pelo usuário. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Buscando arquivos no servidor remoto origin: +git fetch origin +``` + ## Pull +O `pull` é semelhante ao comando `fetch`, porém, puxa os +arquivos do servidor remoto fazendo merge. Caso haja algum conflito de +merge, estes deverão ser resolvidos manualmente. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Puxando arquivos no servidor remoto origin: +git pull origin +``` + + +## HEAD + +`HEAD` é um arquivo que contém um apontador para o `branch` atual. +Quando o `checkout` é executado para a mudança do `branch`, +esse arquivo é automaticamente modificado apontando agora para o +novo local, permitindo que, quando o computador for desligado e depois +ligado novamente, o git ainda esteja trabalhando com o mesmo `branch` +de antes. + +## Tag + +As tags são usadas para marcar pontos específicos do desenvolvimento. +Geralmente são usadas para marcar versões definitivas, como a v1.0, v2.0 +e assim por diante. + +Elas são divididas em dois tipos: leve e anotada. +A `tag` leve simplemente aponta para um `commit` específico, já a `tag` +anotada é guardada como objtos inteiros, possuindo algumas informações +relacionadas a ela, como o nome da pessoa que criou, a data, uma mensagem +semelhante a de `commit`, entre outras. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Criando tag leve: +git tag -l "v1.0.0" + +# Criando tag anotada: +git tag -a v1.0 -m "Minha primeira tag anotada." +``` + +## Stash + +É uma maneira de não precisar fazer um `commit` para mudar de `branch`. +Executando este comando, os arquivos modificados ficam salvos em uma +pilha de modificações inacabadas, sendo possível transitar entre +`branchs` e voltar ao trabalho inacabado quando necessário. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Fazendo o stash: +git stash +# Listando os stash criados: +git stash list +``` + +## Reset + +Enquanto o `git checkout` somente transita entre os `commits`, +o `reset` pode também alterar o histórico, fazendo `commits` serem +apagados de maneira irreversível (--hard), ou serem apenas resetados +ao estado de não commitado (--soft). + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Apagando o ultimo commit (Voltando ao anterior): +git reset --hard HEAD~1 +``` + + ## Rebase -## Bisect +O `rebase` é usado para modificar `commits` antigos. Ele refaz a arvore +de `commits`, sendo assim, não é uma boa ideia fazer um `push` da +alteração, pois modificara a arvore do servidor, afetando todos os +desenvolvedores. + +A idéia geral é que ele pega os commits de um ramo e "muda de base", +passando-os para novos commits do ramo atual, formando uma arvore com +fluxo de trabalho linear. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Fazer o rebase do branch teste para o atual: +git rebase teste +``` +## Blame + +Pesquisa qual `commit` modificou determinado arquivo, com o objetivo +de encontrar quem inseriu um erro e quando foi inserido. + Esse método também e chamado de anotação de arquivo. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Fazer +``` + +## Bisect -[Pro Git](http://git-scm.com/book/en/v2) , escrito por Scott Chacon. \ No newline at end of file +O `bisect` realiza uma pesquisa binária (binary search) a procura de +erros. Para que a pesquisa ocorra, é necessário um ponto no tempo em que +no `commit` esteja tudo funcionando e um em que não esteja. + +**Exemplo:** +```{r, engine='bash', echo=TRUE, eval=FALSE} +# Pesquisa Binária: +# Iniciando a pesquisa. +git bisect start +# Marcando o commit atual como não funcionando. +git bisect bad +# Marcando o commit com nome commit1 como funcionando: +git bisect good commit1 +``` \ No newline at end of file