Git para alunos de humanas (Parte II)

Trabalhando em equipe

O trabalho acadêmico é uma empreitada coletiva em essência. Usar o git e ferramentas como Gitlab/Github permite que as contribuições individuais sejam integradas ao projeto de forma mais simples. Vamos citar uma (de várias) formas de configurar uma workflow produtivo quando várias pessoas precisam contribuir para o mesmo projeto.

Passo 1: Fork e clone

Mesmo que todas as pessoas no trabalho tenham o mesmo status na tomada de decisão, alterar o master do repositório (digamos o estado do projeto principal) ao mesmo tempo impõe algumas dificuldades (alguém sempre terá que fazer um rebase quando outra pessoa cria um novo arquivo no diretório, por exemplo). Por isso, criar um fork do repositório e clonar no computador é uma ótima pedida. No fim, você terá uma cópia sempre atualizada, poderá fazer todo tipo de testes e nunca quebrar o projeto principal.

Então, faça um fork do projeto que você quer contribuir no GitHub/GitLab. Agora, faça um clone do seu fork no computador.

$ git clone https://meufork.git

Agora sempre que você queira atualizar seu clone com a últimas modificações do upstream (projeto original), você simplesmente precisa

$ git fetch
$ git pull

para manter o fork atualizado com o repositório original.

Você pode alterar tudo que queira e usar os comandos tradicionais para criar, editar e enviar alterações (git add, commit e push). Mas qual seria o destino final? Bem, será o seu fork. Para enviar as alterações para o projeto original você vai precisar criar uma “merge request” para que suas contribuições sejam avaliadas e aceitas no projeto original.

Tudo isso pode ser feito pela interface do Gitlab/Github, mas deixa eu te dar outro conselho.

Passo 2: Criando um branch de desenvolvimento

Seguindo o exemplo anterior, se você criasse uma “merge request” ela estaria alterando diretamente o master (o estado do projeto principal) do seu projeto. Isso nem sempre é a melhor forma de fazer. Pensando em uma forma mais segura, podemos criar um ambiente de desenvolvimento separado do master, para que qualquer alteração não o afete até que estejamos certo de que as alterações estão no ponto.

Um branch é um ramo que sai da sua raiz (master) e normalmente ele serve para criar e testar uma nova funcionalidade que você quer implementar. Vamos criar uma:

$ git checkout -b contribuicaoX

O que esse comando faz? ele cria um branch novo (opção -b) e já lhe coloca dentro dela. Se você usa um terminal você pode ver que sua localização agora é contribuicaoX. Um

$ git status

também te mostra sua localização. Nesse momento, você tem uma cópia do seu branch master e pode desenvolver tranquilamente nele. Você poderá usar o comando checkout <nome-branch> para trocar de branch a qualquer momento. Se você remover o branch, o seu master continua intacto. Uma vez que você edite arquivos nesse branch você vai precisar seguir os procedimentos comuns de um repositorio git, apenas o push vai ser um pouco diferente.

$ git add minhacontribuicao
$ git commit -m "adiciono a funcionalidade X ao projeto.
$ git push --set-upstream origin contribuicaoX

Apenas o último comando pode não ser conhecido seu. Ao fazer o push, este comando configura um novo upstream (ao invés do seu master) agora vai ser o seu branch contribuicaoX. Poderiam ser outros caminhos, mas vamos seguir o padrão.

Agora que você criou sua contribuição e acha que ela está adequada para ser integrada no reprositório original, vamos criar um pull request no github desse seu branch contribuicaoX.

Passo 3: Pull Request

Ao abrir a página do fork no Github/Lab você vai ver uma grande mensagem dizendo “Compare & pull request”. Ao clicar nele você poderá criar um pull request. Isto é, uma solicitação para os gerenciadores do repositório original adicionarem sua contribuição. Nela você pode mudar o título (que adota a mensagem do commit como padrão) e adicionar um comentário mais extenso sobre o que sua contribuição faz. Você também pode permitir que os mantenedores do projeto original edite sua contribuição. As vezes isso é bem útil para que a pull resquet seja incorporada mais rápido.

Agora é só esperar que os gerenciadores avaliem e aprovem sua solicitação. Quando você é um contribuidor oficial do projeto e suas alterações não entram em conflito com o master do projeto original você pode inclusive solicitar a tão falada “merge resquest” diretamente.

Quando sua contribuição foi finalmente aceita, ficará visível a mensagem “Pull request successfully merged and closed”. Agora você remover o branch contribuicaoX ou até mesmo o fork inteiro do projeto. Se você pretende continuar contribuindo com o projeto, remova apenas o branch e crie novos para cada contribuição.

$ git branch -d contribuicaoX

OBS: Você poderia querer adicionar as contribuições do branch “contribuicaoX” no master do seu fork. Para isso, você precisa fazer um merge dos branchs (master e contribuicaoX). Isso será um tópico de um post futuro.

OBS sobre atualizações do post

OBS: Essas páginas estão em estágio inicial de desenvolvimento. Sempre que possível irei alterá-las. Uma série de posts vão formar cursos específicos e a ordem do lançamento neste formato não será a mesma.

Referências

Como criar fork no github

Introdução aos branchs no git

Criando pull request no github