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
34397b94
Commit
34397b94
authored
9 years ago
by
Walmes Marques Zeviani
Browse files
Options
Downloads
Patches
Plain Diff
Adiciona sessão de issue, fork, e MR.
parent
07c90afe
No related branches found
No related tags found
1 merge request
!34
Issue#22
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
cap05.Rmd
+190
-15
190 additions, 15 deletions
cap05.Rmd
with
190 additions
and
15 deletions
cap05.Rmd
+
190
−
15
View file @
34397b94
...
@@ -493,29 +493,203 @@ clone, add, commit, branch, push, fetch, pull.
...
@@ -493,29 +493,203 @@ clone, add, commit, branch, push, fetch, pull.
## Macanísmos de colaboração ##
## Macanísmos de colaboração ##
### Fork ###
Os serviços web para Git, mesmo que você trabalhe sozinho, já são
interessantes para que você tenha uma cópia (backup) do seu projeto e
disponibilize seu trabalho. No entanto, um dos principais objetivos dos
serviços web é permitir a colaboração entre pessoas. Já mencionamos o
básico sobre isso quando falamos dos recursos de *issue*, *fork* e
*merge request*. Nas sessões a seguir, vamos nos aprofundar nesses três
mecanísmos chaves para a colaboração via serviços web para Git.
<https://help.github.com/articles/fork-a-repo/>
### Issues ###
<https://confluence.atlassian.com/bitbucket/forking-a-repository-221449527.html>
É uma cópia livre e independente que você pode usar para
De acordo com o dicionário [Macmillan], *issue* significa um problema
acrescentar/corrigir o projeto origem ou usar como ponto de partida para
que precisa ser considerado. Também significa um assunto que as pessoas
outro projeto.
debatem ou o volume de uma revista. Cabe aqui a primeira definição.
Nos serviços web para Git, *issue* é um recurso da interface que permite
que as pessoas abram um assunto/tópico referente ao projeto. Em geral,
com os *issues* as pessoas externas ao projeto indicam um *bug* - uma
falha a ser corrigida - ou sugerem que o projeto incorpore determinada
característica desejável. O dono do projeto avalia a proposta e pode
discutí-la logo em seguida, mantendo as mensagens reunidas e disponíveis
para outros usuários que acompanham o projeto. Quando a proposta do
*issue* for implementada, o *issue* pode ser fechado embora continua
disponível e possa ser referenciado no, tanto para usuários que
reportarem o problema já solucionado (usuários que não estão usando a
versão mais recente) quanto para incluir no *change log* do projeto
(essa versão corrige o bug descrito no *issue#43*, por exemplo).
Quando um projeto é coletivo, como são a maioria dos projetos no PET
Estatística (<https://gitlab.c3sl.ufpr.br/groups/pet-estatistica>), o
recurso de *issue* pode ser usado de outra forma: como gerenciador de
tarefas. Combinado com as *milestones*, cada membro cria um *issue*
correspondente ao que vai fazer no projeto no período de uma semana. Com
isso, todos os demais membros são notificados de que alguém já vai
trabalhar na tarefa A do projeto, eliminando foco duplicado. O *issue* é
parte do fluxo de trabalho do PET Estatística que será descrito em outro
capítulo.
As *milestones* são uma espécie de coleção de *issues* que tenham algo
em comum. Considere por exemplo o projeto de um livro. As *milestones*
podem ser os capítulos a serem escritos e os *issues* podem ser as
seções. Se for um projeto de software, as *milestones* podem separar os
*issues* referentes ao aperfeiçoamento da documentação do software e ao
desenvolvimento do mesmo (escrita de código fonte).
Criar um issue é muito simples. Tanto no GitHub quanto no GitLab, existe
um fácil acesso as *issues* do projeto. Na página dos *issues* você pode
criar um novo *issue*, comentar em um já existente e até reabrir um
*issue* que já foi fechado (comum quando acredita-se ter resolvido um
*bug* mas que ainda não foi). Os *issues* são numerados sequencialmente
e isso faz com que cada *issue* seja único dentro do projeto. Os
serviços web até tem formas de fazer *hiperlinks* facilmente para os
*issues*. No GitLab, usa-se um hash seguido do número identificador
(e.g. `#45`) para indicar um *issue*.
Você não precisa ser colaborador do projeto para dar *fork*, basta estar
### Fork ###
na mesma plataforma. Você pode submeter a sua colaboração para o dono
por meio de *Merge Request*.
Mostrar um pull request que acrescenta pgf e pgs como renderização Tex.
A palavra *fork*, como substantivo, representa forquilha,
https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
bifurcação. Como verbo, representa bifurcar. Esse recurso está presente
nas interfaces web para permitir que usuários facam cópias livres de
projetos de outras pessoas. Como essa cópia é do projeto em determinado
instante, há grande chance de divergência entre cópia e original a
partir desse instante, por isso é apropriado a palavra bifurcamento.
As finalidades de um *fork* são duas: 1) ter uma cópia na qual se possa
acrescentar modificações e enviar para o dono e assim contribuir no
projeto original ou 2) usar a cópia como ponto de partida para outro
projeto, sem intenção de voltar ao projeto original.
Com o *fork*, você pode colaborar como um terceiro em um projeto, ou
seja, sem ser colaborador adicionado pelo dono ao projeto. Nessa cópia
você tem permissões de *owner* pois na realidade, embora seja uma cópia,
ela é toda sua. Você faz sua cópia livre, trabalha como quiser e no
prazo que quiser, e submete ao projeto original o desenvido na sua
cópia. O dono do projeto não tem como saber por que você fez o *fork*
(mas você pode criar um *issue*) nem quando irá concluir o que
almeja. No entanto, quando concluir, para que seu trabalho seja
incorporado ao original, você terá que fazer um *merge request* (isso só
é possível entre usuários de um mesmo serviço web).
No GitHub, o acesso ao *fork* é por um botão que fica mais a direita na
linha de título do projeto. No GitLab, o botão de *fork* fica na página
inicial do projeto logo acima do endereço para clonar. Em qualquer um
desses serviços, uma vez logado, ao pedir um *fork*, uma cópia do
projeto é criada no seu perfil.
Uma vez com a cópia, você pode fazer um clone e começar a desenvolver os
projetos. Se a sua intenção é submeter modificações ao original, seja
ainda mais cuidadoso com as mensagens de *issue*. Escreva sempre no
idioma original do projeto. Muitas vezes, antecipando esse tipo de
colaboração, os usuários disponibilizam guias de contribuição
(*contribution guide*) com instruções de como proceder.
Os *branchs* que criar serão na sua cópia os *pushs* que fizer irão para
o seu perfil. Quando o seu trabalho tiver concluído, você pode fazer um
*merge request* que descreveremos a seguir. Se a sua intenção foi usar o
*fork* como semente para um projeto independente, não se esqueça de dar
os devidos créditos ao dono da cópia, mesmo que lá no futuro, o seu
projeto e o original sejam completamente diferentes.
###
Iss
ues ###
###
Merge Req
ues
t
###
Correções e aperfeiçoamento.
O *merge request* (requisição de mescla/fusão) é o recurso de
colaboração chave. Ele serve para que pessoas da equipe (segundos) peçam
para incorporar *branches* ao ramo principal (em geral o *master* ou o
*devel*) e terceiros peçam para incorporar o desenvolvimento do
*fork*. O GitHub usa o termo *pull request* ao invés de *merge request*
embora não exista diferença alguma.
Os trabalhos coletivos em projetos Git, para serem bem sucedidos,
consideram algum esquema de trabalho. A maioria dos esquemas considera o
desenvolvimento por *branches*. Nada mais justo, já que uma é uma
característica do Git. Existem ramos permanentes, como o
*master*, que recebem os desenvolvimento feito em *branches* auxiliares
ou de demanda. Esses ramos de demanda, como o nome sugere, são criados
para incorporar algo ao projeto e, portanto, não são permanentes - uma
vez incorporados, são removidos.
Nos esquemas de trabalho, os membros são instruídos a fazerem o
desenvolvimentos nos ramos de demandae jamais nos ramos permanentes. Ao
concluir essa unidade de trabalho, esse *branch* é enviado para o
servidor com um `push`
```{r, engine="bash", eval=FALSE}
## Envia o desenvolvido em um ramo.
git push origin issue#33
```
### Merge Request ###
Na interface web, o membro faz um *merge request* desse ramo para um
ramo permamente, que em projetos simples é o *master* mas em projetos
maiores é usualmente o *devel*.
Em ambos os serviços, o *merge resquest* leva para um página na qual
você escolhe que ramo de demanda (doador) será incorporado a um ramo
permamente (receptor). Ao confirmar os ramos envolvidos, tem-se uma
caixa de texto destinada as informações sobre o que as modificações a
serem incorporadas. Elas servem para justificar, esclarecer e informar o
responsável pelo *merge* sobre a incorporação. Quando o projeto é
coletivo e não individual, um membro pode ser indicado como responsável
pelo *merge*.
Na situação de um *fork*, o processo ocorre de forma semelhante. A
sequência de etapas é: fazer o *fork* do projeto para a sua conta, 2)
clonar o projeto para sua máquina, 3) criar um *branch* e fazer o
desenvolvimento nele, 4) subir o *branch* (*push*) para a sua conta e 5)
fazer um *merge request* para incorporar as modificações.
Quando o projeto é um *fork*, na hora de escolher o ramo permanente
(receptor) tem-se duas opções: 1) incorporar ao *master* da sua cópia
ou 2) incorporar ao *master* do original. Outra opção é incorporar ao
*master* da sua cópia e depois pedir um *merge request* do seu *master*
para o *master* do original. Essa última é útil quando a quantidade de
modificações é maior e portanto, o trabalho vai levar mais tempo.
O próprio serviço Web tem recurso para a apliação do *merge* sem
precisar copiar os ramos envolvidos. Isso facilita bastante o
trabalho. Porém, não haver conflito de *merge* não significa que as
modificações incorparadas estão funcionais, ou seja, as modificações
feitas precisam ser testadas localmente para verificar de tiveram
efeito. É possível habilitar o serviço Git para checar se o projeto é
executável, em caso de softwares. Esse recurso se chama intergração
contínua e veremos na próxima sessão.
Em caso de confito de *merge*, tem-se baixar os ramos. Localmente
pode-se comparar as diferenças entre eles para entender as fontes de
conflito. Para isso são recomendáveis as interfaces para Git que serão
discutidas no próximo Capítulo. Uma vez que o *merge* foi resolvido,
deve-se fazer o *push* o ramo permanente (receptor) para o serviço web
que já reconheçe que o *merge* foi feito e fecha a requisição.
Recomenda-se que os ramos de demanda sejam removidos após a incorporação
nos ramos permanentes. Isso torna o projeto mais claro e concentrado em
ramos definitivos colhedores de desenvolvimento. Pode-se exluir o ramo
de demanda incorporado direto pela interface. Por linha de comando
também é possível
```{r, engine="bash", eval=FALSE}
## Deleta o branch issue#33 no servidor (origin).
git push origin :issue#33
## Deleta o branch issue#33 localmente.
git branch -d issue#33
## Deleta a cópia do issue#33 que veio do origin.
git branch -dr origin/issue#33
```
Ao concluir incorporar uma contribuição grande, é interessante marcar o
*commit* vinculado à esse *merge* de uma forma destacável, como por
exemplo, com uma *tag*.
Funciona para *branches* e *forks*.
```{r, engine="bash", eval=FALSE}
## Lista as tags existentes.
git tag
## Adiciona uma tag ao último commit.
git tag -a v1.0 -m "Versão 1.0 do software"
```
## Integração contínua ##
## Integração contínua ##
...
@@ -532,3 +706,4 @@ funcionando/instalando sem erros.
...
@@ -532,3 +706,4 @@ funcionando/instalando sem erros.
[^1]: http://technologyconversations.com/2015/10/16/github-vs-gitlabs-vs-bitbucket-server-formerly-stash/
[^1]: http://technologyconversations.com/2015/10/16/github-vs-gitlabs-vs-bitbucket-server-formerly-stash/
[Digital Ocean]: https://www.digitalocean.com/community/tutorials/how-to-use-the-gitlab-one-click-install-image-to-manage-git-repositories
[Digital Ocean]: https://www.digitalocean.com/community/tutorials/how-to-use-the-gitlab-one-click-install-image-to-manage-git-repositories
[GitLab]: https://about.gitlab.com/
[GitLab]: https://about.gitlab.com/
[Macmillan]: http://www.macmillandictionary.com
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