Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
apostila-git
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Harbor Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pet-estatistica
apostila-git
Commits
07c90afe
Commit
07c90afe
authored
9 years ago
by
Eduardo E. R. Junior
Browse files
Options
Downloads
Plain Diff
Merge branch 'issue#7' into devel
Conflicts: .gitignore
parents
36a26c19
7496bd06
No related branches found
No related tags found
No related merge requests found
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
CONTRIBUTING.md
+138
-138
138 additions, 138 deletions
CONTRIBUTING.md
README.md
+29
-29
29 additions, 29 deletions
README.md
git_tuto.Rmd
+101
-2
101 additions, 2 deletions
git_tuto.Rmd
git_tuto.md
+717
-471
717 additions, 471 deletions
git_tuto.md
with
985 additions
and
640 deletions
CONTRIBUTING.md
+
138
−
138
View file @
07c90afe
Guia de contribuição
Guia de contribuição
====================
====================
Esse é um projeto público do PET Estatística aberto a
Esse é um projeto público do PET Estatística aberto a
colaboradores. Para que a colaboração seja bem sucedida, seguem algumas
colaboradores. Para que a colaboração seja bem sucedida, seguem algumas
intruções e recomendações.
intruções e recomendações.
## O funcionamento
## O funcionamento
O núcleo do tutorial é o arquivo
`git_tuto.Rmd`
. O arquivo
`Rmd`
é
O núcleo do tutorial é o arquivo
`git_tuto.Rmd`
. O arquivo
`Rmd`
é
marcado por ser escrito com sintaxe
[
markdown
][]
com fragmentos de
marcado por ser escrito com sintaxe
[
markdown
][]
com fragmentos de
código R. Os fragmentos de código R são interpretados durante a
código R. Os fragmentos de código R são interpretados durante a
compilação feita com a função
`render`
do pacote
[
rmarkdown
][]
. Por ser
compilação feita com a função
`render`
do pacote
[
rmarkdown
][]
. Por ser
escrito em markdown, o tutorial pode ser compilado em formatos como markdown (
`.md`
), html e PDF.
escrito em markdown, o tutorial pode ser compilado em formatos como markdown (
`.md`
), html e PDF.
Apesar de
`Rmd`
normalmente ter fragmentos de código R, nesse tutorial
Apesar de
`Rmd`
normalmente ter fragmentos de código R, nesse tutorial
predominam fragmentos de código shell, em outras palavras, são
predominam fragmentos de código shell, em outras palavras, são
fragmentos de código executados do terminal do Linux. Para ter um
fragmentos de código executados do terminal do Linux. Para ter um
fragmento de código shell que seja interpretado na compilação, tem-se
fragmento de código shell que seja interpretado na compilação, tem-se
que fazê-lo conforme abaixo.
que fazê-lo conforme abaixo.
```{r, engine="sh"}
```
{r, engine="sh"}
comando shell
comando shell
```
```
A compilação desse documento cria sempre um projeto Git do zero. Com
A compilação desse documento cria sempre um projeto Git do zero. Com
intruções do shell ao longo do documento, no instante da compilação,
intruções do shell ao longo do documento, no instante da compilação,
arquivos são criados, adicionados (
`git add`
), commitados (
`git
arquivos são criados, adicionados (
`git add`
), commitados (
`git
commit`
), moficados, etc. Esse documento é, portanto, um documento
commit`
), moficados, etc. Esse documento é, portanto, um documento
reproduzível.
reproduzível.
Para compilar o documento você deve abrir uma sessão R onde o diretório
Para compilar o documento você deve abrir uma sessão R onde o diretório
de trabalho é o que contém o arquivo
`git_tuto.Rmd`
e rodar uma chamada
de trabalho é o que contém o arquivo
`git_tuto.Rmd`
e rodar uma chamada
da função render. Usuários do RStudio podem fazer isso diretamente pelo
da função render. Usuários do RStudio podem fazer isso diretamente pelo
botão de compilar, presente na barra de ferramentas.
botão de compilar, presente na barra de ferramentas.
```{r, engine="sh"}
```
{r, engine="sh"}
library(rmarkdown)
library(rmarkdown)
render("git_tuto.Rmd")
render("git_tuto.Rmd")
```
```
Os diretórios criados durante a compilação são sempre apagados, para que ao
Os diretórios criados durante a compilação são sempre apagados, para que ao
compilar novamente, tudo seja reproduzido. O projeto deve recriar tudo e
compilar novamente, tudo seja reproduzido. O projeto deve recriar tudo e
é essa a intenção, apesar do custo. Se os diretórios não fossem
é essa a intenção, apesar do custo. Se os diretórios não fossem
deletados antes de uma nova compilação, iria-se receber erros de
deletados antes de uma nova compilação, iria-se receber erros de
compilação.
compilação.
Esse documento usa instruções no terminal que podem ser particulares do
Esse documento usa instruções no terminal que podem ser particulares do
Linux, como o comando
`tree`
e
`sed`
. Portando, a reprodutibilidade da
Linux, como o comando
`tree`
e
`sed`
. Portando, a reprodutibilidade da
compilação pode não acontecer em outros sistemas operacionais.
compilação pode não acontecer em outros sistemas operacionais.
## O fluxo de trabalho
## O fluxo de trabalho
Esse projeto terá dois ramos persistentes:
Esse projeto terá dois ramos persistentes:
*
`devel`
: que irá receber imediatamente a contribuição dos
*
`devel`
: que irá receber imediatamente a contribuição dos
membros e será submetido a teste (no caso compilação). Se bem
membros e será submetido a teste (no caso compilação). Se bem
sucedido, a contribuição é movida para o ramo
`master`
.
sucedido, a contribuição é movida para o ramo
`master`
.
*
`master`
: que recebe a versão estável do projeto.
*
`master`
: que recebe a versão estável do projeto.
Os membros devem criar ramos de demanda para adicionarem suas
Os membros devem criar ramos de demanda para adicionarem suas
contribuições. Por exemplo, se existe a demanda (
*issue*
) de acrescentar uma
contribuições. Por exemplo, se existe a demanda (
*issue*
) de acrescentar uma
sessão sobre o uso do programa
`meld`
para resolver conflitos de merge,
sessão sobre o uso do programa
`meld`
para resolver conflitos de merge,
deve-se criar um ramo para isso, adicionar as contribuições e subir esse
deve-se criar um ramo para isso, adicionar as contribuições e subir esse
ramo para o repositório remoto. Os
*issues*
criados no GitLab são
ramo para o repositório remoto. Os
*issues*
criados no GitLab são
automaticamente numerados. Para nosso benefício, vamos usar o mesmo
automaticamente numerados. Para nosso benefício, vamos usar o mesmo
número ao criar os
*branches*
para atender as correspondentes
número ao criar os
*branches*
para atender as correspondentes
demandas. Vamos usar o padrão
`issue#?`
em que
`?`
representa o número
demandas. Vamos usar o padrão
`issue#?`
em que
`?`
representa o número
do
*issue*
.
do
*issue*
.
```
sh
```
sh
git branch
-b
issue#3
git branch
-b
issue#3
... trabalha, git add, git commit ...
... trabalha, git add, git commit ...
... trabalha, git add, git commit ...
... trabalha, git add, git commit ...
... trabalha, git add, git commit ...
... trabalha, git add, git commit ...
git push origin issue#3
git push origin issue#3
```
```
Assim que der o
`git push`
, a próxima etapa é fazer uma requisição de
Assim que der o
`git push`
, a próxima etapa é fazer uma requisição de
*merge*
. Isso se faz pela interface do GitLab clicando em
*merge*
. Isso se faz pela interface do GitLab clicando em
[
merge request
][]
no menu da esquerda, dentro da página do projeto, e
[
merge request
][]
no menu da esquerda, dentro da página do projeto, e
depois no botão
*New Merge Request*
. Lá é onde se designa o responsável
depois no botão
*New Merge Request*
. Lá é onde se designa o responsável
por avaliar e aplicar o
*merge*
e quais os
*branches*
envolvidos
por avaliar e aplicar o
*merge*
e quais os
*branches*
envolvidos
(doador/receptor).
(doador/receptor).
Existe apenas uma regra que jamais deve ser quebrada:
Existe apenas uma regra que jamais deve ser quebrada:
> Nunca dê `push` para os ramos `devel` e `master`.
> Nunca dê `push` para os ramos `devel` e `master`.
Esses ramos se receberão conteúdo provenientes de
*merge*
dos ramos de
Esses ramos se receberão conteúdo provenientes de
*merge*
dos ramos de
demanda (
*issue*
).
demanda (
*issue*
).
## Mensagens de commit
## Mensagens de commit
É extremamente recomendado, por questões de organização e produtividade,
É extremamente recomendado, por questões de organização e produtividade,
que as mensagens de commit sejam apropriadas. Não use mensagens vagas ou
que as mensagens de commit sejam apropriadas. Não use mensagens vagas ou
óbvias do tipo
*Modificações feitas*
,
*Arquivos incluídos*
. Procure algo
óbvias do tipo
*Modificações feitas*
,
*Arquivos incluídos*
. Procure algo
como
*Incluí arquivo de estilo CSS*
,
*Modifica preâmbulo*
,
*
Troca
como
*Incluí arquivo de estilo CSS*
,
*Modifica preâmbulo*
,
*
Troca
'require' por 'library'
*
(
[
5 dicas para melhores commits
][]
).
'require' por 'library'
*
(
[
5 dicas para melhores commits
][]
).
Exitem formas especiais de escrever um
*commit*
que tenha ações do
Exitem formas especiais de escrever um
*commit*
que tenha ações do
repositório remoto como fechar um
*issue*
ou fazer uma referência a
repositório remoto como fechar um
*issue*
ou fazer uma referência a
outro
*commit*
(
[
ações nas mensagens de commit
][]
). As palavras
outro
*commit*
(
[
ações nas mensagens de commit
][]
). As palavras
especiais são:
`close`
,
`closes`
,
`closed`
,
`fix`
,
`fixes`
,
`fixed`
,
especiais são:
`close`
,
`closes`
,
`closed`
,
`fix`
,
`fixes`
,
`fixed`
,
`resolve`
,
`resolves`
,
`resolved`
. Depois das palavras vem uma
`resolve`
,
`resolves`
,
`resolved`
. Depois das palavras vem uma
identificação de
*issue*
ou
*sha1*
.
identificação de
*issue*
ou
*sha1*
.
```
sh
```
sh
git commit
-m
"Close #4. Bug devido ao encoding."
git commit
-m
"Close #4. Bug devido ao encoding."
```
```
Visite para mais dicas de como escrever um
*commit*
:
Visite para mais dicas de como escrever um
*commit*
:
[
como-escrever-boas-mensagens-de-commit
][]
[
como-escrever-boas-mensagens-de-commit
][]
## Escrita do código
## Escrita do código
Recomensa-se fortemente que ao escrever o código, não se ultrapasse 72
Recomensa-se fortemente que ao escrever o código, não se ultrapasse 72
caracteres por linha. Isso torna o texto/código mais legível nos
caracteres por linha. Isso torna o texto/código mais legível nos
arquivos fontes. Linhas longas são difíceis de ler nos monitores atuais,
arquivos fontes. Linhas longas são difíceis de ler nos monitores atuais,
que possuem uma tela grande.
que possuem uma tela grande.
Editores de texto (de verdade) geralmente possuem formas de auto quebrar
Editores de texto (de verdade) geralmente possuem formas de auto quebrar
linhas, auto indentar/acomodar ou sinalizar a margem direita. O Emacs
linhas, auto indentar/acomodar ou sinalizar a margem direita. O Emacs
tem
[
auto break lines
][]
e
[
refluxo de texto
][]
. Outros editores
tem
[
auto break lines
][]
e
[
refluxo de texto
][]
. Outros editores
permitem exibir uma linha vertical para indicar o limite, como o RStudio
permitem exibir uma linha vertical para indicar o limite, como o RStudio
(> Tools > Global Options > Code > Display > Margin column).
(> Tools > Global Options > Code > Display > Margin column).
[
markdown
]:
http://br-mac.org/2013/09/o-que-e-markdown.html
[
markdown
]:
http://br-mac.org/2013/09/o-que-e-markdown.html
[
rmarkdown
]:
http://rmarkdown.rstudio.com/
[
rmarkdown
]:
http://rmarkdown.rstudio.com/
[
merge request
]:
https://gitlab.c3sl.ufpr.br/pet-estatistica/git-tutorial/merge_requests
[
merge request
]:
https://gitlab.c3sl.ufpr.br/pet-estatistica/git-tutorial/merge_requests
[
ações nas mensagens de commit
]:
https://help.github.com/articles/closing-issues-via-commit-messages/
[
ações nas mensagens de commit
]:
https://help.github.com/articles/closing-issues-via-commit-messages/
[
5 dicas para melhores commits
]:
https://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message
[
5 dicas para melhores commits
]:
https://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message
[
auto break lines
]:
http://emacswiki.org/emacs/LineWrap
[
auto break lines
]:
http://emacswiki.org/emacs/LineWrap
[
refluxo de texto
]:
http://www.emacswiki.org/emacs/FillParagraph
[
refluxo de texto
]:
http://www.emacswiki.org/emacs/FillParagraph
[
como-escrever-boas-mensagens-de-commit
]:
http://blog.diovani.com/post/101092814586/como-escrever-boas-mensagens-de-commit
[
como-escrever-boas-mensagens-de-commit
]:
http://blog.diovani.com/post/101092814586/como-escrever-boas-mensagens-de-commit
This diff is collapsed.
Click to expand it.
README.md
+
29
−
29
View file @
07c90afe
Tutorial de Git
Tutorial de Git
===============
===============
O
[
Git
][]
é um sistema de controle de versão distribuído cuja finalidade
O
[
Git
][]
é um sistema de controle de versão distribuído cuja finalidade
é permitir que muitas pessoas colaborem no mesmo projeto facilmente
é permitir que muitas pessoas colaborem no mesmo projeto facilmente
"juntando" as contribuições dos membros e incorporando ao projeto com o
"juntando" as contribuições dos membros e incorporando ao projeto com o
mínimo de esforço possível.
mínimo de esforço possível.
Esse projeto tem a finalidade de aprofundar o conhecimento do Git e
Esse projeto tem a finalidade de aprofundar o conhecimento do Git e
documentar tal aprendizado em uma apostila que seja útil tanto para
documentar tal aprendizado em uma apostila que seja útil tanto para
iniciantes quanto para usuários intermediários.
iniciantes quanto para usuários intermediários.
O projeto é desenvolvido no serviço GitLab do C3SL e acessado pelo link:
O projeto é desenvolvido no serviço GitLab do C3SL e acessado pelo link:
<https://gitlab.c3sl.ufpr.br/pet-estatistica/apostila-git>
<https://gitlab.c3sl.ufpr.br/pet-estatistica/apostila-git>
Todas as contribuições ao projeto são bem vindas, tanto por meio de
Todas as contribuições ao projeto são bem vindas, tanto por meio de
[
issue
][]
quando por
*fork*
.
[
issue
][]
quando por
*fork*
.
**PET Estatística UFPR**
**PET Estatística UFPR**
*
[
Alessandra Zeizer Dimas
](
https://gitlab.c3sl.ufpr.br/u/pazd11
)
*
[
Alessandra Zeizer Dimas
](
https://gitlab.c3sl.ufpr.br/u/pazd11
)
*
[
Ângela Luiza Cunha Legey
](
https://gitlab.c3sl.ufpr.br/u/alcl12
)
*
[
Ângela Luiza Cunha Legey
](
https://gitlab.c3sl.ufpr.br/u/alcl12
)
*
[
Daniel Ikenaga
](
https://gitlab.c3sl.ufpr.br/u/di12
)
*
[
Daniel Ikenaga
](
https://gitlab.c3sl.ufpr.br/u/di12
)
*
[
Eduardo Elias Ribeiro Junior
](
https://gitlab.c3sl.ufpr.br/u/eerj12
)
*
[
Eduardo Elias Ribeiro Junior
](
https://gitlab.c3sl.ufpr.br/u/eerj12
)
*
[
Gabriel Sartori Klostermann
](
https://gitlab.c3sl.ufpr.br/u/gsk12
)
*
[
Gabriel Sartori Klostermann
](
https://gitlab.c3sl.ufpr.br/u/gsk12
)
*
[
Jhenifer Caetano Veloso
](
https://gitlab.c3sl.ufpr.br/u/jcv13
)
*
[
Jhenifer Caetano Veloso
](
https://gitlab.c3sl.ufpr.br/u/jcv13
)
[
Git
]:
https://git-scm.com/book/pt-br/v1/Primeiros-passos-No%C3%A7%C3%B5es-B%C3%A1sicas-de-Git
[
Git
]:
https://git-scm.com/book/pt-br/v1/Primeiros-passos-No%C3%A7%C3%B5es-B%C3%A1sicas-de-Git
[
issue
]:
https://gitlab.c3sl.ufpr.br/pet-estatistica/git-tutorial/issues
[
issue
]:
https://gitlab.c3sl.ufpr.br/pet-estatistica/git-tutorial/issues
\ No newline at end of file
This diff is collapsed.
Click to expand it.
git_tuto.Rmd
+
101
−
2
View file @
07c90afe
...
@@ -4,9 +4,11 @@ author: "PET Estatística UFPR"
...
@@ -4,9 +4,11 @@ author: "PET Estatística UFPR"
output:
output:
html_document:
html_document:
highlight: pygments
highlight: pygments
toc: true
keep_md: yes
theme: flatly
theme: flatly
keep_md: true
toc: yes
pdf_document:
toc: yes
---
---
```{r, include=FALSE}
```{r, include=FALSE}
...
@@ -1840,6 +1842,103 @@ opts_chunk$set(eval=FALSE)
...
@@ -1840,6 +1842,103 @@ opts_chunk$set(eval=FALSE)
****
****
## Ignorando arquivos e diretórios
## Ignorando arquivos e diretórios
Há momentos em que é necessário a criação de arquivos e pastas, dentro do
repositório git, que não devem ser versionados, como é o caso de uma
compilação Latex, que gera arquivos auxiliares que não é preciso deixar
disponível a terceiros. Para esse intuito, o git possui um recurso que permite
que arquivos e pastas fiquem "invisíveis" para o software.
Para que isso ocorra, é indispensável a criação de um arquivo com extensão
`.gitignore`, que o git irá reconhecer e efetuar leitura a procura de
pastas e arquivos a ignorar. Dentro deste arquivo, é imprescindível que seja
escrito, por linha, somente um nome de pasta ou arquivo a ser ignorado.
### Padrões de formatos para o `.gitignore`
* Linhas em branco não são lidas, servindo apenas como modo de separar e
organizar o arquivo.
* Os caracteres ` # ` e ` ! ` são reservado do git. Para pastas ou arquivos
que os nomes comecem com ` # ` (Exemplo: #git.txt) ou ` ! ` (Exemplo: !git.txt),
deve-se usar uma barra invertida na frente do padrão (Exemplo: \\#ddd.txt, \\!ddd.txt).
* O caracter ` # ` serve para efetuar comentários, ou seja, a linha que iniciar com `#`
não será interpretada pelo git.
* O caracter `!` serve para negar um padrão, por exemplo, pode-se mandar o git
ignorar todos os arquivos de determinada pasta (Usando: Nome_Dir/*),
mas deixar de ignorar um arquivo específico dentro dela
(Exemplo: !Nome_Dir/Arquivo.txt).
* O asterisco ` * ` pode ser usado para substituir parte do nome de
arquivos e pastas, ou o nome inteiro. Isso é valido também para a
extensão do arquivo.
* Um diretório pode ser ignorado adicionando seu nome e uma barra ao final deste.
* Dois asteriscos ` ** ` podem ser usados para substituir caminhos de subpastas,
como por exemplo, para ignorar o diretório Subpasta,
o caminho `/Exercicio/Teste/Pasta/Subpasta/` pode ser substituido por `/**/Subpasta/`.
### Exemplo
O código abaixo é um exemplo de um arquivo com extensão `.gitignore`:
```{r, engine="sh", eval=FALSE}
# Esta linha é um comentário.
# Ignorando arquivos com extensão .aux menos o arquivo EXEMPLO.aux:
*.aux
!EXEMPLO.aux
# Ignorando todos os arquivos com nome EXEMPLO:
EXEMPLO.*
# Ignorando arquivos que possuam HTML no nome:
HTML*.*
# Ignorando as Subpastas e os arquivos da pasta DIR:
DIR/*
# Não ignorar apenas a Subpasta1 da pasta DIR:
!DIR/Subpasta1/
```
Vale ressaltar que, no exemplo acima, por mais que esteja sendo ignorado arquivos
com o nome EXEMPLO, e arquivos com extensão .aux,
o arquivo EXEMPLO.aux (que está pecedido do sinal `!`) não será ignorado.
### Tornando Global
Cada vez que cria-se um novo projeto, para que arquivos sejam ignorados,
deve-se criar um novo arquivo `.gitignore`. Para que isso não ocorra, e
possível configurar o arquivo globalmente, ou seja, ele estará incorporado
as configurações do git do seu computador.
```{r, engine="sh", eval=FALSE}
git config --global core.excludesfile ~/.gitignore_global
```
Depois de executar o código acima, o `.gitignore` da pasta atual
(pasta do seu projeto) será atribuido como global no arquivo de
configuração do git (`.gitconfig`).
Uma observação importante a ser feita é que, se adicionado arquivos para
serem ignorados globalmente, como arquivos PDF (Usando: *.pdf), por exemplo,
todos os arquivos com essa extensão serão ignorados pelo git,
não somente os do projeto atual.
Portanto, é recomendado somente definir um `.gitignore` como global,
se ele apenas desconsiderar arquivos auxiliares, ou seja, que não serão necessários
para compilações futuras.
****
****
## Autenticando em contas do GitLab (c3sl) e GitHub
## Autenticando em contas do GitLab (c3sl) e GitHub
...
...
This diff is collapsed.
Click to expand it.
git_tuto.md
+
717
−
471
View file @
07c90afe
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment