Gestão de Repositórios e Colaboração¶
Nesta etapa do curso, vamos explorar as práticas de gestão de repositórios e colaboração em equipe. Vamos abordar o uso de plataformas como GitHub e GitLab, as funcionalidades disponíveis, boas práticas de colaboração, pull requests, code review e estratégias de branching.
Num projeto Git, a colaboração eficiente é essencial para o sucesso do desenvolvimento de software. Através de ferramentas e práticas adequadas, é possível organizar o trabalho em equipe, revisar e integrar as alterações de forma eficiente, garantindo a qualidade do código e a produtividade da equipe.
Inicialmente, é importante resgatar alguns conceitos importantes, entre eles: repositórios remotos e locais, branches, pull requests e code review. Esses elementos são fundamentais para a colaboração em equipe e para a organização do desenvolvimento de software.
Repositórios Remotos e locais¶
Os repositórios remotos são versões do seu projeto que estão hospedadas em servidores remotos, como GitHub, GitLab ou Bitbucket. Eles permitem que você compartilhe seu código com outras pessoas e acesse-o de qualquer lugar. Além disso, os repositórios remotos são essenciais para a colaboração em equipe, pois permitem que vários desenvolvedores trabalhem no mesmo projeto simultaneamente.
Eles diferem dos repositórios locais, que estão armazenados em sua máquina e são acessíveis apenas localmente. Ao trabalhar em um projeto colaborativo, é comum que cada desenvolvedor tenha uma cópia do repositório remoto em sua máquina local, onde eles podem fazer alterações e contribuições.
Em linhas gerais, a relação entre repositórios remotos e locais é bidirecional: você pode clonar um repositório remoto para sua máquina local, fazer alterações e enviá-las de volta para o repositório remoto. Da mesma forma, você pode baixar as alterações feitas por outros desenvolvedores no repositório remoto para sua máquina local.
Plataformas Git¶
O Git é uma ferramenta poderosa para o controle de versão de código-fonte, mas para colaborar efetivamente em projetos de software, é necessário uma plataforma de hospedagem de repositórios Git. Ao usar uma plataforma Git, os desenvolvedores podem compartilhar, revisar e colaborar em projetos de forma eficiente, além de acessar recursos adicionais, como integração contínua, controle de acesso e gerenciamento de tarefas.
Existem várias plataformas populares para hospedagem de repositórios Git, cada uma com suas próprias características e funcionalidades. Algumas das plataformas mais conhecidas são:
- GitHub: Uma das plataformas mais populares para hospedagem de repositórios Git, o GitHub oferece uma ampla gama de recursos para colaboração em projetos de código aberto e privados. Ele é amplamente utilizado pela comunidade de desenvolvedores e empresas de tecnologia.
- GitLab: O GitLab é uma plataforma de desenvolvimento de software completa, que inclui recursos de controle de versão, integração contínua, gerenciamento de tarefas e muito mais. Ele é conhecido por sua flexibilidade e por oferecer uma versão de código aberto que pode ser instalada em servidores locais.
- Bitbucket: O Bitbucket é uma plataforma de hospedagem de repositórios Git da Atlassian, que oferece suporte para projetos de código aberto e privados. Ele é conhecido por sua integração com outras ferramentas da Atlassian, como Jira e Confluence.
Essas três plataformas apresentadas possuem diversos recursos gratuitos e pagos, sendo amplamente utilizadas pela comunidade de desenvolvedores para hospedar projetos de software e colaborar em equipe. Cada uma delas tem suas vantagens e características específicas, o que pode influenciar na escolha da plataforma mais adequada para um determinado projeto ou equipe de desenvolvimento.
GitHub¶
O GitHub foi criado em 2008 por Chris Wanstrath, PJ Hyett e Tom Preston-Werner e é uma das plataformas mais populares para hospedagem de repositórios Git. Depois de sua criação, o GitHub cresceu rapidamente e se tornou uma das maiores comunidades de desenvolvedores do mundo, com milhões de repositórios públicos e privados hospedados em sua plataforma. Em 2018, o GitHub foi adquirido pela Microsoft, que além de manter a plataforma, tem investido em melhorias e integrações com outros produtos da empresa.
Alguns dos principais recursos do GitHub incluem:
- Repositórios públicos e privados: O GitHub permite hospedar repositórios públicos gratuitamente, que podem ser acessados por qualquer pessoa. Além disso, ele oferece planos pagos para repositórios privados, que são ideais para projetos comerciais ou proprietários.
- Issues e projetos: O GitHub oferece recursos avançados para gerenciamento de tarefas, como issues e projetos, que permitem que as equipes organizem e priorizem o trabalho de forma eficiente.
- Pull requests e code review: Os pull requests são uma forma estruturada de colaboração em projetos Git, permitindo que os desenvolvedores revisem, discutam e integrem as alterações de forma coordenada.
- Integração contínua: O GitHub Actions é uma ferramenta de integração contínua integrada ao GitHub, que permite automatizar tarefas de build, testes e implantação diretamente nos repositórios.
- Comunidade e colaboração: O GitHub é conhecido por sua ampla comunidade de desenvolvedores, que compartilham projetos de código aberto, contribuem com projetos existentes e colaboram em equipe de forma eficiente.
GitLab¶
O GitLab é uma plataforma de desenvolvimento de software completa, que oferece recursos de controle de versão, integração contínua, gerenciamento de tarefas e muito mais. Ele foi criado em 2011 por Dmitriy Zaporozhets e Valery Sizov e se tornou uma alternativa popular ao GitHub, especialmente para equipes que buscam uma solução completa para o ciclo de vida do desenvolvimento de software.
Alguns dos principais recursos do GitLab incluem:
- Repositórios públicos e privados: O GitLab oferece suporte para repositórios públicos e privados, com recursos avançados de controle de acesso e segurança.
- Integração contínua: O GitLab CI/CD é uma ferramenta de integração contínua integrada ao GitLab, que permite automatizar tarefas de build, testes e implantação diretamente nos repositórios.
- Gerenciamento de tarefas: O GitLab oferece recursos avançados para gerenciamento de tarefas, como issues, epics e roadmaps, que permitem que as equipes organizem e priorizem o trabalho de forma eficiente.
- Code review e merge requests: O GitLab oferece recursos avançados para code review e merge requests, que permitem que as equipes revisem, discutam e integrem as alterações de forma coordenada.
- Automação e personalização: O GitLab é conhecido por sua flexibilidade e capacidade de automação, permitindo que as equipes personalizem seus processos de desenvolvimento de acordo com suas necessidades.
Outra característica do GitLab é que ele permite a instalação em servidores locais, o que é ideal para empresas que desejam manter o controle sobre seus dados e processos de desenvolvimento. Além disso, o GitLab oferece uma versão de código aberto, o GitLab Community Edition, que pode ser usada gratuitamente por equipes de desenvolvimento.
Bitbucket¶
O Bitbucket é uma plataforma de hospedagem de repositórios Git da Atlassian, que oferece suporte para projetos de código aberto e privados. Ele foi criado em 2008 e adquirido pela Atlassian em 2010, tornando-se parte do portfólio de ferramentas de desenvolvimento da empresa, que inclui o Jira, Confluence e Trello.
Alguns dos principais recursos do Bitbucket incluem:
- Repositórios públicos e privados: O Bitbucket oferece suporte para repositórios públicos e privados, com recursos avançados de controle de acesso e segurança.
- Integração com outras ferramentas da Atlassian: O Bitbucket é integrado com outras ferramentas da Atlassian, como Jira e Confluence, permitindo uma integração contínua entre o controle de versão, gerenciamento de tarefas e documentação.
- Code review e pull requests: O Bitbucket oferece recursos avançados para code review e pull requests, que permitem que as equipes revisem, discutam e integrem as alterações de forma coordenada.
- Integração contínua: O Bitbucket Pipelines é uma ferramenta de integração contínua integrada ao Bitbucket, que permite automatizar tarefas de build, testes e implantação diretamente nos repositórios.
O Bitbucket é uma opção popular para equipes que já utilizam outras ferramentas da Atlassian, como o Jira e Confluence, pois oferece uma integração nativa entre essas ferramentas. Além disso, o Bitbucket oferece planos gratuitos e pagos, com recursos avançados para equipes de desenvolvimento de todos os tamanhos.
Revisão das plataformas Git¶
As plataformas Git, como GitHub, GitLab e Bitbucket, desempenham um papel fundamental na colaboração eficiente em projetos de software. Elas oferecem recursos avançados para gerenciamento de repositórios, controle de versão, integração contínua e colaboração em equipe, permitindo que os desenvolvedores trabalhem de forma coordenada e produtiva.
Existem ainda outras plataformas de hospedagem de repositórios Git disponíveis no mercado, cada uma com suas próprias características e funcionalidades. A escolha da plataforma mais adequada para um projeto ou equipe de desenvolvimento depende de vários fatores, como o tamanho da equipe, o tipo de projeto, os recursos necessários e as preferências dos desenvolvedores.
Independentemente da plataforma escolhida, é importante que as equipes adotem boas práticas de colaboração, como o uso de pull requests, code review e integração contínua, para garantir a qualidade do código, a eficiência do desenvolvimento e a produtividade da equipe.
Estratégias de Branching¶
O uso de branches (ramificações) é uma prática comum no versionamento de código que permite que os desenvolvedores trabalhem em funcionalidades ou correções de bugs isoladamente, sem interferir no código principal. Cada branch representa uma linha de desenvolvimento separada, que pode ser integrada ao branch principal (geralmente main ou master) por meio de merges.
Os branches são úteis para organizar o trabalho em equipe, facilitar a revisão de código e manter um histórico claro das alterações realizadas. Por exemplo, uma equipe de desenvolvimento pode criar branches específicos para cada funcionalidade ou tarefa, como feature/nova-funcionalidade ou bugfix/correcao-bug.
Após concluir o desenvolvimento em um branch, é comum realizar um merge para integrar as mudanças no branch principal. O merge é o processo de combinar as alterações de um branch em outro, garantindo que o código seja atualizado e os conflitos sejam resolvidos corretamente.
Resolução de Conflitos¶
Durante o merge, podem ocorrer conflitos quando duas ou mais alterações entram em conflito, ou seja, modificam a mesma parte do código. Nesses casos, é necessário resolver os conflitos manualmente, escolhendo qual versão do código deve ser mantida.
As ferramentas de versionamento, como Git, oferecem suporte para resolver conflitos de forma eficiente, permitindo que os desenvolvedores comparem as versões do código, escolham as alterações desejadas e finalizem o merge com sucesso.
A resolução de conflitos é uma etapa importante no processo de desenvolvimento colaborativo, pois garante que as mudanças sejam integradas corretamente e que o código seja mantido consistente ao longo do tempo.
GitFlow¶
O GitFlow é um modelo de branching amplamente utilizado que define um fluxo de trabalho com branches específicos para features, releases, hotfixes e versões. Ele propõe a utilização de branches como feature/, release/, hotfix/ e develop para organizar o desenvolvimento de forma estruturada e facilitar a colaboração em equipe.
O GitFlow é baseado em algumas premissas fundamentais:
master: Branch principal que contém o código em produção.develop: Branch de desenvolvimento contínuo, onde as features são integradas.feature/: Branches para o desenvolvimento de novas funcionalidades.release/: Branches para preparar novas versões para produção.hotfix/: Branches para corrigir bugs críticos em produção.
O GitFlow é uma estratégia eficaz para organizar o desenvolvimento de software, facilitar a colaboração em equipe e manter um histórico claro das alterações realizadas.
Para implementar o GitFlow existe um aplicativo, chamado git-flow, que facilita a utilização dessa estratégia.
Por exemplo, usando o git-flow, você pode criar um novo branch de feature com o comando:
E finalizar a feature com o comando:
O git-flow automatiza o processo de criação e finalização de branches, facilitando o uso do GitFlow em projetos de desenvolvimento de software.
Contudo, nem sempre é necessário usar essa ferramenta, pois o GitFlow pode ser implementado manualmente, sem a necessidade de uma ferramenta específica. O que importa é seguir o fluxo de trabalho proposto pelo GitFlow para organizar o desenvolvimento de forma eficiente.
Existem outras estratégias de branching, como o trunk-based development, que propõem abordagens diferentes para organizar o desenvolvimento de software. Cada equipe pode escolher a estratégia que melhor se adapta às suas necessidades e ao seu fluxo de trabalho.
Pull Requests¶
Os pull requests (ou solicitações de pull) são uma forma de colaboração em projetos Git, em que um desenvolvedor propõe as alterações feitas em um branch para serem mescladas no branch principal (ou outra branch). Eles são comumente usados em projetos colaborativos para revisar, discutir e integrar as alterações de forma estruturada.
Ao abrir um pull request, o desenvolvedor pode descrever as alterações feitas, mencionar outros colaboradores, solicitar revisões e discutir os detalhes das mudanças. Isso permite que a equipe revise o código, faça comentários, sugira melhorias e aprove as alterações antes de serem mescladas no código principal.
Por que usar pull requests?¶
Os pull requests são uma prática recomendada para colaboração em projetos Git por vários motivos:
- Revisão de código: Os pull requests permitem que os desenvolvedores revisem o código de seus colegas, façam comentários, sugiram melhorias e identifiquem possíveis problemas antes de mesclar as alterações no código principal. Isso ajuda a garantir a qualidade do código e a identificar bugs precocemente.
- Colaboração estruturada: Ao abrir um pull request, os desenvolvedores podem descrever as alterações feitas, mencionar outros colaboradores, solicitar revisões e discutir os detalhes das mudanças. Isso promove uma colaboração mais estruturada e eficiente entre os membros da equipe.
- Histórico de alterações: Os pull requests mantêm um registro detalhado das alterações feitas no código, incluindo quem fez as alterações, quando foram feitas e quais foram as discussões realizadas. Isso é útil para auditorias, para entender o contexto das mudanças e para rastrear a evolução do código ao longo do tempo.
- Integração contínua: Os pull requests são uma parte fundamental da integração contínua (CI), onde o código é frequentemente integrado e testado automaticamente. Ferramentas como GitHub Actions e GitLab CI/CD permitem configurar pipelines de CI que automatizam a verificação das alterações propostas antes de serem mescladas no código principal.
Como criar um pull request¶
Para criar um pull request, siga os seguintes passos:
- Crie um branch: Antes de abrir um pull request, crie um branch a partir do branch principal (geralmente
mainoumaster) para desenvolver suas alterações. Por exemplo, você pode criar um branchfeature/nova-funcionalidade` para implementar uma nova funcionalidade. - Faça as alterações: Faça as alterações desejadas no seu branch, adicione, modifique ou remova arquivos conforme necessário.
- Commit e push: Após fazer as alterações, faça commits locais e envie as alterações para o repositório remoto usando
git push. - Abra o pull request: No GitHub ou GitLab, vá até a página do repositório, clique no botão "New pull request" e selecione o branch que contém as alterações que você deseja mesclar.
- Descreva as alterações: Escreva uma descrição detalhada das alterações feitas, mencione outros colaboradores, solicite revisões e discuta os detalhes das mudanças.
- Solicite revisões: Se desejar, solicite revisões de outros colaboradores para revisar o código, fazer comentários e sugerir melhorias.
- Aguarde a aprovação: Aguarde a revisão e a aprovação dos colaboradores antes de mesclar as alterações no código principal.
- Resolva os comentários: Caso haja comentários ou sugestões de melhorias, faça as alterações necessárias e atualize o pull request.
- Mescle as alterações: Após a aprovação e resolução dos comentários, mescle as alterações no branch principal clicando no botão "Merge pull request".
Alguns times de desenvolvimento podem ter regras específicas para a abertura e aprovação de pull requests, como a obrigatoriedade de revisão por pares, a execução de testes automatizados ou a integração com ferramentas de CI/CD. Certifique-se de seguir as práticas adotadas pela sua equipe ao criar e revisar pull requests.
Um estratégia muito comum é delimitar qual usuário pode fazer o merge do pull request, evitando que o próprio autor do pull request faça o merge, garantindo assim uma revisão por pares.
Code Review¶
O code review (ou revisão de código) é uma prática essencial para garantir a qualidade do código, identificar possíveis problemas e promover a colaboração em equipe. Durante o code review, os desenvolvedores revisam o código de seus colegas, fazem comentários, sugerem melhorias e verificam se as boas práticas de desenvolvimento foram seguidas.
Em geral, o code review é realizado por meio de ferramentas de controle de versão, como GitHub e GitLab, que permitem que os desenvolvedores visualizem as alterações, façam comentários linha a linha e discutam as mudanças propostas. Essa prática ajuda a identificar bugs, melhorar a legibilidade do código e promover a troca de conhecimento entre os membros da equipe.
Na prática, em equipes bem organizadas, o code review é uma etapa obrigatória antes de mesclar as alterações em um projeto. Ele garante que o código seja revisado por pares, que possíveis problemas sejam identificados e que a qualidade do código seja mantida ao longo do tempo.
Benefícios do code review¶
O code review traz diversos benefícios para equipes de desenvolvimento, incluindo:
- Identificação de bugs: Durante o code review, os desenvolvedores podem identificar bugs, problemas de lógica e falhas de segurança no código antes que ele seja mesclado no projeto principal. Isso ajuda a garantir a qualidade do software e a reduzir o número de bugs em produção.
- Melhoria da qualidade do código: O code review promove a troca de conhecimento entre os membros da equipe, permitindo que os desenvolvedores aprendam uns com os outros, compartilhem boas práticas e melhorem a qualidade do código. Comentários construtivos e sugestões de melhorias ajudam a elevar o nível técnico da equipe.
- Conformidade com padrões e boas práticas: Durante o code review, os desenvolvedores podem verificar se o código segue os padrões de codificação, as boas práticas de desenvolvimento e as diretrizes do projeto. Isso ajuda a manter a consistência do código, facilita a manutenção e evita problemas futuros.
- Aprendizado contínuo: O code review é uma oportunidade para os desenvolvedores aprenderem novas técnicas, ferramentas e abordagens de desenvolvimento. Ao revisar o código de seus colegas, os desenvolvedores podem expandir seu conhecimento e aprimorar suas habilidades técnicas.
- Promoção da colaboração: O code review promove a colaboração e a comunicação entre os membros da equipe, criando um ambiente de trabalho mais colaborativo e produtivo. Comentários construtivos, sugestões de melhorias e discussões técnicas ajudam a fortalecer o trabalho em equipe.
Boas práticas de code review¶
Para obter os melhores resultados com o code review, é importante seguir algumas boas práticas:
- Seja construtivo: Ao fazer comentários no código de seus colegas, seja construtivo e respeitoso. Evite críticas negativas ou ataques pessoais e concentre-se em fornecer feedback útil e construtivo.
- Seja específico: Ao identificar problemas ou sugerir melhorias, seja específico e forneça exemplos claros. Explique o motivo por trás das sugestões e forneça orientações sobre como corrigir os problemas.
- Mantenha o foco: Durante o code review, mantenha o foco nos objetivos da revisão. Evite discutir questões não relacionadas ao código ou aprofundar-se em detalhes irrelevantes.
- Respeite o tempo: Respeite o tempo dos seus colegas e evite sobrecarregá-los com revisões extensas ou desnecessárias. Priorize os comentários mais relevantes e úteis para melhorar o código.
- Aprenda com o feedback: Encare o code review como uma oportunidade de aprendizado e crescimento. Esteja aberto a receber feedback, aprender com os comentários dos seus colegas e aprimorar suas habilidades técnicas.
Projeto em grupo¶
A proposta é um projeto em grupo para desenvolver um Gerenciador de Tarefas Web simples, onde os usuários podem adicionar, editar e remover tarefas. O projeto deve ser feito em equipe no GitHub, seguindo boas práticas de versionamento e colaboração.
O tema sugerido não é obrigatório, mas serve como ponto de partida para a prática de colaboração em equipe. Os alunos podem adaptar o projeto conforme desejarem, desde que sigam as diretrizes de versionamento e colaboração propostas.
Tecnologias sugeridas
- Backend: FastAPI, Django ou Node.js
- Frontend: HTML, CSS, JavaScript (ou Vue.js, se quiserem algo mais avançado)
- Banco de dados: SQLite ou PostgreSQL (opcional)
- Ferramentas: GitHub para versionamento e colaboração
Organização da Equipe (4 pessoas)
No desenvolvimento do projeto não devem ser criados papeis fixos (documentador, testador, desenvolvedor backend ou frontend), mas sim que todos os membros participem de todas as etapas do desenvolvimento. A ideia é que todos aprendam e pratiquem as habilidades de versionamento e colaboração.
Tarefas que devem ser consideradas
-
Versionamento e Repositório
-
Configurar o repositório no GitHub.
- Criar o README.md com a documentação inicial.
-
Definir a estrutura de pastas do projeto.
-
Backend
-
Criar uma API para gerenciar as tarefas (CRUD).
- Criar os endpoints REST.
-
Documentar a API (Swagger ou Postman).
-
Frontend
-
Criar a interface web para interação com a API.
-
Usar HTML/CSS e JavaScript para consumir os dados.
-
Integração e Revisão de Código
- Definir e aplicar Conventional Commits.
- Gerenciar pull requests e code reviews.
- Definir e aplicar estratégias de branching.
Requisitos do Projeto
- Criar um repositório público no GitHub.
- Definir branches (main, develop, feature/*).
- Aplicar commits semânticos (Conventional Commits).
- Criar pull requests para cada nova funcionalidade.
- Implementar code review antes de mergear código.
- Criar um README.md explicando o projeto.
Como o trabalho será avaliado
- Uso correto do Git e GitHub (branching, commits, PRs, code review).
- Organização do repositório (documentação, estrutura do projeto).
- Colaboração (todos os membros devem contribuir).
- Qualidade do código (boas práticas e estruturação).