Skip to content
Snippets Groups Projects
Commit 9c6d4bd9 authored by gabriel sartori's avatar gabriel sartori
Browse files

revisão do capítulo

parent faadd49c
No related branches found
No related tags found
1 merge request!37Issue#50
...@@ -6,9 +6,9 @@ Dicionário de Termos ...@@ -6,9 +6,9 @@ Dicionário de Termos
## Config ## Config
O `config` é um comando usado para ajustar as configurações padrão do git. 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 Há duas configurações básicas a serem feitas: a inclusão do e-mail e
do nome do usuário git. do nome do usuário Git.
Todas as configurações definidas como globais ficam armazenadas em um Todas as configurações definidas como globais ficam armazenadas em um
arquivo chamado `.gitconfig`, que fica localizado no diretório padrão arquivo chamado `.gitconfig`, que fica localizado no diretório padrão
do usuário. do usuário.
...@@ -24,7 +24,7 @@ git config --global user.email ezio.auditore@exemple.com ...@@ -24,7 +24,7 @@ git config --global user.email ezio.auditore@exemple.com
## SSH Key ## SSH Key
É uma chave de autenticação baseada em criptografia de chave pública É uma chave de autenticação baseada em criptografia de chave pública
(chave assimétrica). Essa criptografia torna o processo transferência (chave assimétrica). Essa criptografia torna o processo de transferência
de arquivos entre o cliente e o servidor mais segura. de arquivos entre o cliente e o servidor mais segura.
Para que o git local consiga se conectar a um servidor git remoto, é Para que o git local consiga se conectar a um servidor git remoto, é
...@@ -41,7 +41,7 @@ ssh-keygen ...@@ -41,7 +41,7 @@ ssh-keygen
## Help ## Help
Todo comando git tem um manual de ajuda que pode ser exibido na tela Todo comando Git tem um manual de ajuda que pode ser exibido na tela
com o comando `--help`. com o comando `--help`.
**Exemplo:** **Exemplo:**
...@@ -52,12 +52,15 @@ git status --help ...@@ -52,12 +52,15 @@ git status --help
## Repositório ## Repositório
<<<<<<< HEAD
=======
Um repositório é uma pasta gerenciada pelo git. A partir
da criação desta, usufruimos dos sistema de versionamento, sendo possível
transitar entre as diferentes versões a medida que necessário.
>>>>>>> 07c90afef682bf3d8d8cd150e8145174e3520928
usufruimos da podemos marcar pontos de mudanças significativas nos arquivos gerenciados,
sendo possível transitar entre as diferentes verões a medida do necessário.
**Sugestão**: Um repositório é uma pasta gerenciada pelo git. A partir
da criação desta, usufruimos dos sistema de versionamento.
**Exemplo:** **Exemplo:**
...@@ -68,19 +71,17 @@ git init ...@@ -68,19 +71,17 @@ git init
## Stagin Area ## Stagin Area
A stagin area é um espaço temporário na pasta gerenciada pelo git. É 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. o local em que ficam os arquivos antes de serem marcados como uma versão
Em tradução livre, stagin area é area de estágio, definitiva. Em tradução livre, stagin area é área de estágio, podemos
podemos assim imaginar que o arquivo está estagiando antes de assim imaginar que o arquivo está estagiando antes de ser promovido a um
ser promovido a um arquivo definitivo. arquivo definitivo.
## Remote ## Remote
O `remote` mostra o servidor remoto aonde o O `remote` mostra o servidor remoto onde os arquivos Git estão hospedados.
seus arquivos git estão hospedados. O remote padrão O remote padrão geralmente é criado com o nome de `origin`, mas é possível adicioná-lo utilizando outros nomes e até mesmo adicionar outros servidores
geralmente é criado com o nome de `origin`, mas remotos juntamente ao `origin`.
é possível adiciona-lo utilizando outros nomes e
até mesmo adicionar outros servidores remotos juntamente ao `origin`.
**Exemplo:** **Exemplo:**
```{r, engine='bash', eval=FALSE} ```{r, engine='bash', eval=FALSE}
...@@ -96,8 +97,8 @@ disponível em um servidor remoto para o servidor local. ...@@ -96,8 +97,8 @@ disponível em um servidor remoto para o servidor local.
Depois da clonagem, estará disponível todos os arquivos e todo o Depois da clonagem, estará disponível todos os arquivos e todo o
histórico de controle de versões sem a necessidade de uso da internet. histórico de controle de versões sem a necessidade de uso da internet.
É importante salientar que quando é usado o `clone`, o servidor remoto É importante salientar que quando se é usado o `clone`, o servidor remoto
é adicionado automaticamente, podendo ser acessado atravéz do nome é adicionado automaticamente, podendo ser acessado através do comando
`origin`. `origin`.
**Exemplo:** **Exemplo:**
...@@ -111,7 +112,7 @@ git remote ...@@ -111,7 +112,7 @@ git remote
## Status ## Status
O status exibe a diferença entre o estado atual dos arquivos e o estado 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: do último `commit` do mesmo `branch`. São três estados possíveis:
consolidado (committed), modificado (modified) e preparado (staged). consolidado (committed), modificado (modified) e preparado (staged).
**Exemplo:** **Exemplo:**
...@@ -133,10 +134,9 @@ git add * ...@@ -133,10 +134,9 @@ git add *
## Commit ## Commit
O `commit` marca os arquivos da stagin area como uma O `commit` marca os arquivos da stagin area como uma versão definitiva,
versão definitiva, para que posteriormente, caso algum erro ocorra, para que posteriormente, caso algum erro ocorra, possamos voltar nos
possamos voltar para commits anteriores onde o código está commits anteriores onde o código está em pleno funcionamento.
em pleno funcionamento.
**Exemplo:** **Exemplo:**
```{r, engine="bash", echo=TRUE, eval=FALSE} ```{r, engine="bash", echo=TRUE, eval=FALSE}
...@@ -145,11 +145,18 @@ git commit -m "Meu primeiro commit" ...@@ -145,11 +145,18 @@ git commit -m "Meu primeiro commit"
## Branch ## Branch
<<<<<<< HEAD
Os `branchs` são como uma cópia dos arquivos do ultimo commit Os `branchs` são como uma cópia dos arquivos do ultimo commit
para um ambiente de desenvolvimento paralelo, o que para um ambiente de desenvolvimento paralelo, o que
permite que as modificações em um `branch` não afete os arquivos em outro. 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. Veja com mais Os branchs também são chamados de ramos de desenvolvimento. Veja com mais
detalhes no capitulos dos worksflows. detalhes no capitulos dos worksflows.
=======
Os `branchs` são como cópias dos arquivos do último commit para um ambiente
de desenvolvimento paralelo, o qual 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.
>>>>>>> 07c90afef682bf3d8d8cd150e8145174e3520928
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -160,7 +167,7 @@ git branch novoBranch ...@@ -160,7 +167,7 @@ git branch novoBranch
## Checkout ## Checkout
O `checkout` serve para transitar entre branchs e commits. O `checkout` serve para transitar entre branchs e commits.
Usando o checkout é possivel voltar a commits anteriores. Usando o checkout é possível voltar a commits anteriores.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -170,10 +177,10 @@ git checkout teste ...@@ -170,10 +177,10 @@ git checkout teste
## Merge ## Merge
Com o `merge` é possivel a fusão dos dois ramos em um. Com o `merge` é possível a fusão de dos dois ramos em um.
Quando se trabalha em ramos diferentes (diferentes branchs) e precisa-se Quando se trabalha em ramos diferentes (diferentes branchs) e precisa-se
posteriormente juntar o trabalho dos dois, o `merge` (fundir) é usado, posteriormente juntar o trabalho, o `merge` (fundir) é usado,
permitindo que o trabalho seja centralizado novamente. A fusão é feita permitindo que o trabalho seja centralizado novamente. A fusão é feita
de forma automática, mas conflitos podem ocorrer, como por exemplo, de forma automática, mas conflitos podem ocorrer, como por exemplo,
quando duas ou mais pessoas modificam a mesma parte do código. quando duas ou mais pessoas modificam a mesma parte do código.
...@@ -188,14 +195,20 @@ git merge novoBranch ...@@ -188,14 +195,20 @@ git merge novoBranch
## Rm ## Rm
<<<<<<< HEAD
O `git rm`, na sua forma mais comum, serve para remover um arquivo de O `git rm`, na sua forma mais comum, serve para remover um arquivo de
forma que ele deixe de ser gerenciado pelo git e seja excluido do disco forma que ele deixe de ser gerenciado pelo git e seja excluido do disco
rígido. Também é possível que o arquivo deixe de ser gerenciado rígido. Também é possível que o arquivo deixe de ser gerenciado
e permaneça no disco. e permaneça no disco.
=======
O `git rm`, de forma mais prática, serve para remover um arquivo deixando
de ser gerenciado pelo Git e seja excluído do disco rígido. Também é possível
que o arquivo deixe de ser gerenciado e permaneça no disco.
>>>>>>> 07c90afef682bf3d8d8cd150e8145174e3520928
Uma das vantagens é que, quando o arquivo é removido pelo `git rm`, ele Uma das vantagens é que, quando o arquivo é removido pelo `git rm`,
aparece como preparado (staged), precisando somente que aparece como preparado (staged), precisando somente que a exclusão seja
a exclusão seja commitada. commitada.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -208,10 +221,9 @@ git rm --cached teste.tex ...@@ -208,10 +221,9 @@ git rm --cached teste.tex
## Mv ## Mv
O `git mv` move ou renomeia arquivos, informando ao git que eles foram O `git mv` move ou renomeia arquivos informando ao Git.
movidos ou renomeados.
Caso a mudança seja feita sem esse comando o git entende que o arquivo 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, foi deletado e que um novo arquivo foi criado, deixando de fora,
por exemplo, a ligação existente entre o arquivo e seus commits. por exemplo, a ligação existente entre o arquivo e seus commits.
...@@ -234,10 +246,8 @@ git push origin master ...@@ -234,10 +246,8 @@ git push origin master
## Fetch ## Fetch
O `fetch` busca no repositório remoto os dados e arquivos que O `fetch` atualiza o repositório local com as alterações do remoto, porém
não estão no repositório local. É impostante frisar que o `fetch` não não realiza o merge dos arquivos, deixando isso para ser feito manualmente.
faz o merge dos arquivos, deixando isso para ser feito manualmente
pelo usuário.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -262,10 +272,9 @@ git pull origin ...@@ -262,10 +272,9 @@ git pull origin
`HEAD` é um arquivo que contém um apontador para o `branch` atual. `HEAD` é um arquivo que contém um apontador para o `branch` atual.
Quando o `checkout` é executado para a mudança do `branch`, Quando o `checkout` é executado para a mudança do `branch`,
esse arquivo é automaticamente modificado apontando agora para o esse arquivo é automaticamente modificado, apontando agora para o
novo local, permitindo que, quando o computador for desligado e depois novo local, e assim permitindo que, quando o computador for desligado e
ligado novamente, o git ainda esteja trabalhando com o mesmo `branch` depois de reniciado o Git ainda esteja trabalhando com o mesmo `branch`.
de antes.
## Tag ## Tag
...@@ -274,10 +283,10 @@ Geralmente são usadas para marcar versões definitivas, como a v1.0, v2.0 ...@@ -274,10 +283,10 @@ Geralmente são usadas para marcar versões definitivas, como a v1.0, v2.0
e assim por diante. e assim por diante.
Elas são divididas em dois tipos: leve e anotada. Elas são divididas em dois tipos: leve e anotada.
A `tag` leve simplemente aponta para um `commit` específico, já a `tag` A `tag` leve simplesmente aponta para um `commit` específico. Já a `tag`
anotada é guardada como objtos inteiros, possuindo algumas informações anotada é guardada como objetos inteiros, possuindo algumas informações,
relacionadas a ela, como o nome da pessoa que criou, a data, uma mensagem como o nome da pessoa que criou, a data, uma mensagem semelhante a de `commit`,
semelhante a de `commit`, entre outras. entre outras.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -290,8 +299,8 @@ git tag -a v1.0 -m "Minha primeira tag anotada." ...@@ -290,8 +299,8 @@ git tag -a v1.0 -m "Minha primeira tag anotada."
## Stash ## Stash
É uma maneira de não precisar fazer um `commit` para mudar de `branch`. Com este comando não é necessário fazer um `commit` para mudar de `branch`.
Executando este comando, os arquivos modificados ficam salvos em uma Ao executá-lo, os arquivos modificados ficam salvos em uma
pilha de modificações inacabadas, sendo possível transitar entre pilha de modificações inacabadas, sendo possível transitar entre
`branchs` e voltar ao trabalho inacabado quando necessário. `branchs` e voltar ao trabalho inacabado quando necessário.
...@@ -307,25 +316,25 @@ git stash list ...@@ -307,25 +316,25 @@ git stash list
Enquanto o `git checkout` somente transita entre os `commits`, Enquanto o `git checkout` somente transita entre os `commits`,
o `reset` pode também alterar o histórico, fazendo `commits` serem o `reset` pode também alterar o histórico, fazendo `commits` serem
apagados de maneira irreversível (--hard), ou serem apenas resetados apagados de maneira irreversível (--hard) ou serem apenas resetados
ao estado de não commitado (--soft). ao estado de não commitado (--soft).
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
# Apagando o ultimo commit (Voltando ao anterior): # Apagando o último commit (voltando ao anterior):
git reset --hard HEAD~1 git reset --hard HEAD~1
``` ```
## Rebase ## Rebase
O `rebase` é usado para modificar `commits` antigos. Ele refaz a arvore O `rebase` é usado para modificar `commits` antigos. Ele refaz a árvore
de `commits`, sendo assim, não é uma boa ideia fazer um `push` da de `commits`, sendo assim não é uma boa ideia fazer um `push` da
alteração, pois modificara a arvore do servidor, afetando todos os alteração, pois modificará a árvore do servidor afetando todos os
desenvolvedores. desenvolvedores.
A idéia geral é que ele pega os commits de um ramo e "muda de base", A ideia geral é `rebase` apaga os commits de um ramo e "muda de base",
passando-os para novos commits do ramo atual, formando uma arvore com passando-os para novos commits do ramo atual, formando uma árvore com
fluxo de trabalho linear. fluxo de trabalho linear.
**Exemplo:** **Exemplo:**
...@@ -337,8 +346,8 @@ git rebase teste ...@@ -337,8 +346,8 @@ git rebase teste
## Blame ## Blame
Pesquisa qual `commit` modificou determinado arquivo, com o objetivo Pesquisa qual `commit` modificou determinado arquivo, com o objetivo
de encontrar quem inseriu um erro e quando foi inserido. de encontrar quem e quando um erro foi inserido.
Esse método também e chamado de anotação de arquivo. Esse método também é chamado de anotação de arquivo.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
...@@ -349,7 +358,7 @@ de encontrar quem inseriu um erro e quando foi inserido. ...@@ -349,7 +358,7 @@ de encontrar quem inseriu um erro e quando foi inserido.
O `bisect` realiza uma pesquisa binária (binary search) a procura de 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 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. o código esteja funcionando e outro que não esteja.
**Exemplo:** **Exemplo:**
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
......
## Clonar, Modificar e Enviar
Exemplos de Rotinas
===================
## Clonar, Modificar e Subir
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
# Clonar o projeto desta apostila: # Clonar o projeto desta apostila:
git clone git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git git clone git@gitlab.c3sl.ufpr.br:pet-estatistica/apostila-git.git
# Modifique o projeto antes de executar o código abaixo.
# Commitar o projeto:
git commit -a -m "Sua Mensagem de Commit"
# Enviar projeto ao servidor (branch master, servidor origin):
git push origin master
```
## Resolver conflito de merge
```{r, engine='bash', eval=FALSE, echo=TRUE}
# Requisitar merge:
git merge ramo_teste
# Resolver conflitos manualmente.
# Finalizar merge com o commit:
git commit -a -m "Merge do ramo_teste"
```
## Incorporar o remoto ao local
```{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
```
## Resolver um bug
```{r, engine='bash', eval=FALSE, echo=TRUE}
git branch bugfix
git checkout bugfix
# Modifica o código de acordo com o necessário.
git commit -a -m "Bug corrigido"
git checkout master
git merge bugfix
git branch -d bugfix
``` ```
## Deletar Ramos ## Deletar ramos
```{r, engine='bash', echo=TRUE, eval=FALSE} ```{r, engine='bash', echo=TRUE, eval=FALSE}
# Listar ramos:
git branch
# Deletar ramo local:
git branch -d "nome_ramo" git branch -d "nome_ramo"
# Deletar ramo remoto:
git push origin :nome_ramo
```
## Criar ramo de um commit passado
```{r, engine='bash', echo=TRUE, eval=FALSE}
# Verificar código commit:
git log
# Criando branch com commit do código
# ec3650c8661d75b486a236e3d416ab58db1d596a:
git branch novo_branch ec3650c8661d75b486a236e3d416ab58db1d596a
# Mudando para novo_branch
git checkout novo_branch
``` ```
## Voltar o projeto para um commit
```{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
```
## Reescrever mensagem de commit
```{r, engine='bash', echo=TRUE, eval=FALSE}
git log --oneline
git commit --amend "Correção de Commit"
git push -f origin master
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment