Guia completo de Git e GitHub: programe com IA da forma certa
Introdução ao Git e sua Importância
Riscos da Inteligência Artificial
- Ao trabalhar com inteligência artificial, há o risco de que as tarefas não saiam como planejado, levando a situações em que um projeto funcional pode ser comprometido.
- É comum querer reverter para um estado anterior antes das modificações, especialmente após falhas significativas.
O Que é Git?
- Git é uma ferramenta essencial para programadores e aqueles que trabalham com IA, permitindo gerenciar versões de código de forma eficiente.
- A compreensão do Git é crucial para evitar problemas em projetos de software, especialmente quando se lida com mudanças frequentes.
Características do Git
Versão e Gerenciamento de Código
- O Git é uma tecnologia gratuita e open source projetada para versionamento de código, desde pequenos aplicativos até grandes projetos.
- Criado por Linus Torvalds, o mesmo criador do Linux, o Git se destaca como um dos maiores sucessos no mundo do software open source.
Importância do Versionamento
- O versionamento permite capturar "fotos" do código em diferentes momentos (ex: versão 1.0, 1.1), facilitando a identificação de mudanças entre versões.
- Caso uma atualização cause problemas, o usuário pode reverter facilmente para uma versão anterior que estava funcionando corretamente.
Prática com Git
Criação e Uso Prático
- O vídeo irá demonstrar a criação prática de um repositório no Git e algumas funcionalidades básicas necessárias para começar a usar a ferramenta.
- Embora existam muitas funcionalidades avançadas no Git (desenvolvido em 2005), o foco será nas operações essenciais que qualquer usuário deve conhecer.
Introdução ao Git e Repositórios
Conceitos Básicos de Repositório
- O apresentador menciona a importância de ter um "dicionário" para entender os termos que serão utilizados durante a explicação sobre Git.
- Um repositório é definido como o local onde o código reside, essencialmente armazenando todos os arquivos necessários para um projeto.
- O exemplo do repositório Codex no GitHub ilustra como o código pode ser acessado e visualizado, incluindo documentações e scripts.
Open Source vs. Código Aberto
- A distinção entre open source e open code é discutida; embora não sejam sinônimos exatos, são usados de forma intercambiável para fins didáticos.
- O conceito de que todo o código necessário para rodar um projeto deve estar contido dentro do repositório é enfatizado.
Diferença entre Git e GitHub
- É importante notar que Git é uma tecnologia de versionamento distribuído, enquanto GitHub é uma plataforma que utiliza essa tecnologia para facilitar a interação com os repositórios.
- Outros clientes além do GitHub, como Bitbucket e GitLab, também existem, mas o GitHub domina o mercado com uma grande participação.
Repositórios Públicos e Privados
- A diferença entre repositórios públicos (acessíveis a qualquer pessoa) e privados (acessíveis apenas por usuários autorizados) é explicada com exemplos práticos.
- O apresentador menciona que hoje em dia tanto repositórios públicos quanto privados podem ser criados gratuitamente no GitHub.
Importância do Versionamento com Git
Salvar Estados do Código
- O ato de salvar no contexto do desenvolvimento é comparado a tirar uma foto do estado atual do código, permitindo voltar a esse ponto se necessário.
Programação Assistida por Inteligência Artificial
- A relevância do versionamento se torna ainda mais crítica quando se trabalha com inteligência artificial, pois mudanças inesperadas podem ocorrer no código.
A Importância do Versionamento de Código com IA
Uso da IA para Desenvolvimento de Código
- O uso de IAs para escrever código é visto como uma prática comum, onde muitas tarefas podem ser consideradas descartáveis. O autor prefere testar a IA e descartar o que não atende às suas expectativas.
- A segurança no versionamento é destacada; o autor menciona que sempre pode voltar ao estado anterior do código, pois ele está versionado.
Conceito de Commit
- O ato de "comitar" é comparado a tirar uma foto do estado atual do código, garantindo que as mudanças sejam salvas corretamente.
- Cada commit registra apenas as alterações feitas (o "DIF"), permitindo visualizar claramente o que foi modificado em cada versão.
- O histórico dos commits permite acompanhar todas as modificações realizadas, facilitando a identificação das mudanças específicas em arquivos.
Estrutura e Funcionamento das Branches
- É introduzido o conceito de "branch", ou ramificação, essencial para organizar diferentes versões do código. A branch principal é referida como "main" ou "master".
- A nomenclatura da branch principal é discutida; o autor expressa preferência pelo termo "master", apesar da mudança recente na terminologia.
Visualização e Gerenciamento de Mudanças
- O autor explica que a branch representa um ponto específico no desenvolvimento do código, onde se pode ver qual parte está sendo trabalhada atualmente.
- Um exemplo prático é dado sobre como criar e gerenciar branches usando ferramentas como Codex, enfatizando a importância dessa estrutura no fluxo de trabalho.
Processo de Commit e Mensagens
- Após realizar alterações no código, o próximo passo é fazer um commit para salvar essas mudanças. Isso cria uma cópia atualizada do repositório com as novas modificações.
- É mencionado que cada commit deve ter uma mensagem descritiva para documentar as alterações realizadas, facilitando futuras referências.
Entendendo o Controle de Versão e Branches no Git
Clarificação na Documentação do MCP
- O apresentador menciona a necessidade de clarificação em uma documentação relacionada ao MCP, indicando que houve um erro anterior que foi corrigido com um commit explicativo.
Análise de Commits Complexos
- Um exemplo de commit é apresentado, onde 31 arquivos foram alterados. A descrição detalhada do commit é comparada a uma legenda para uma foto, facilitando a compreensão das mudanças realizadas.
Importância da Master Branch
- Ao trabalhar em um repositório, especialmente em projetos maiores ou em produção, não é aconselhável fazer commits diretamente na branch master. Isso se deve ao fato de que tudo que está na master é acessível aos usuários finais.
- O apresentador explica que alterações feitas na branch master são automaticamente disponibilizadas para os usuários, como no caso do aplicativo Quant Brasil, onde o código vai direto para o servidor após ser enviado à master.
Práticas Recomendadas ao Trabalhar com Branches
- Para evitar problemas em aplicações maiores e garantir qualidade nas implementações, recomenda-se trabalhar em branches separadas antes de realizar merges na master.
Criando e Gerenciando Novas Features
- O apresentador discute a criação de uma nova feature chamada "change color", enfatizando a importância de criar uma branch específica para essa tarefa usando comandos apropriados no Git.
- É sugerido que as convenções para nomear branches sejam seguidas, como incluir o ID do ticket relacionado quando se utiliza softwares de gerenciamento como Linear ou Jira.
Ramificações e Checkout no Git
- Após criar uma nova branch (fit change color), o usuário deve fazer checkout nessa branch para começar a trabalhar nela. Isso cria uma cópia do código da branch principal (master).
- O comando
git checkout -bpermite criar e mudar rapidamente para uma nova branch. O estado atual do HEAD indica qual branch está ativa no momento.
Isolamento das Mudanças
- As mudanças feitas na nova branch não afetam imediatamente a master; isso permite testar e desenvolver novas funcionalidades sem comprometer a versão estável disponível aos usuários.
Como Gerenciar Branches no Git?
Erros em Produção e Correções
- O apresentador menciona que precisou voltar para a branch master devido a um erro em produção, demonstrando a importância de corrigir problemas rapidamente.
- Ele explica que o commit feito na nova branch não está presente na master, destacando como as mudanças podem ser isoladas em branches diferentes.
- A necessidade de mesclar (merge) as alterações da branch de correção com a master é introduzida, enfatizando o fluxo de trabalho do Git.
Processo de Merge
- O apresentador detalha como realizar um merge usando o comando
git merge, integrando as mudanças da branch master à branch atual.
- Após o merge, ele confirma que as alterações da master agora estão na branch color, mas não vice-versa, ilustrando a dinâmica entre branches.
Fluxo de Trabalho com Branches
- O processo para levar código da branch color para a master é descrito; isso envolve fazer um checkout para a master e realizar outro merge.
- É ressaltado que o versionamento no Git envolve criar branches e mesclá-las conforme necessário, uma prática essencial para gerenciar código eficientemente.
Estrutura Comum de Branches
- O apresentador discute como trabalhar em uma equipe pode exigir uma estrutura mais complexa com branches como staging ou develop antes do lançamento final.
- Ele sugere que após testar novas funcionalidades em staging, os desenvolvedores devem fazer um merge dessas alterações na master quando estiverem prontos para produção.
Colaboração e Desenvolvimento Paralelo
- A importância do trabalho colaborativo é abordada; múltiplos desenvolvedores podem estar trabalhando simultaneamente em diferentes features derivadas da mesma branch base (staging).
- Exemplos são dados sobre como várias branches podem ser criadas a partir da staging para implementar diferentes funcionalidades sem interferência direta entre elas.
Introdução ao Controle de Versão com Git
Trabalhando com Branches e Merge
- O apresentador explica o conceito de ramificação (branching) no Git, onde diferentes desenvolvedores podem trabalhar em funcionalidades distintas simultaneamente.
- Após finalizar uma funcionalidade, um desenvolvedor pode fazer o merge da branch de trabalho para a branch principal (stage), integrando as mudanças.
- A importância do processo de merge é destacada, mostrando como ele permite unir várias funcionalidades antes do lançamento na produção.
Criando um Repositório no GitHub
- O apresentador demonstra como criar um repositório no GitHub, começando pela criação de uma conta e seguindo para a configuração inicial do repositório.
- É mencionado que o repositório deve ser nomeado e configurado com visibilidade pública ou privada, além da opção de adicionar um README e .gitignore.
Inicializando o Repositório Localmente
- O comando
git inité utilizado para inicializar o repositório localmente. O apresentador prefere renomear a branch principal de "main" para "master".
- A execução do comando
git statuspermite visualizar os arquivos não rastreados pelo Git, preparando-os para serem adicionados ao controle de versão.
Adicionando Arquivos e Realizando Commits
- O uso do comando
git addé explicado como forma de incluir arquivos modificados na próxima foto (commit).
- Um commit é realizado com uma mensagem descritiva usando
git commit -m "mensagem", capturando todas as alterações feitas até aquele momento.
Conectando ao GitHub e Enviando Alterações
- Para enviar as alterações locais para o repositório remoto no GitHub, utiliza-se o comando
git remote add origin <URL>seguido porgit push.
Como Fazer Push de Código para o GitHub?
Comandos Básicos do Git
- O usuário menciona que não jogou, mas apenas tirou uma foto e linkou. Ele quer saber como fazer o push do código para o GitHub, utilizando o comando
git pushpara enviar o código para a nuvem.
- O autor explica que ao usar
origin head, ele está se referindo à origem local e à branch atual (head), que normalmente é a master. Ele prefere usar "head" para evitar confusões entre branches.
- Após realizar um
push, ele verifica no repositório do GitHub e confirma que os arquivos e commits estão visíveis. Os passos necessários são:git add,git commitegit push.
Visualização de Alterações
- O autor demonstra como alterar uma cor em um arquivo, mostrando a diferença entre as versões usando o comando
git diff. Isso permite visualizar as alterações feitas.
- Ele menciona que pode utilizar IDEs modernas como VS Code, onde é possível editar diretamente e gerar mensagens de commit automaticamente.
Trabalhando com Branches
- O autor fala sobre a importância de ter um cliente Git visual, permitindo ver todas as mudanças realizadas em um histórico claro.
- Ele planeja implementar uma nova feature relacionada ao scroll em sua aplicação, criando uma branch específica para isso.
Criação de Novas Features
- Ao criar uma nova branch chamada "feature right panel scroll", ele utiliza comandos do GitHub CLI para facilitar esse processo.
- A ferramenta já cria a branch e muda automaticamente para ela. No VS Code, é possível ver qual branch está ativa.
Interação com IA no Desenvolvimento
- O autor testa a funcionalidade da nova feature e faz ajustes conforme necessário. Ele destaca que pode pedir à IA para realizar commits e pushes automaticamente.
- A interação com a IA inclui verificar status das modificações (
git status) e visualizar diferenças (git diff). A IA também ajuda na execução dos comandos necessários sem precisar digitar tudo manualmente.
Esses pontos cobrem os principais conceitos discutidos no vídeo sobre como trabalhar com Git e GitHub, incluindo comandos básicos, visualização de alterações, gerenciamento de branches e integração com ferramentas inteligentes.
Gerenciamento de Branches e Pull Requests no GitHub
Criação e Visualização de Branches
- O usuário está na branch master e observa que uma nova branch chamada "feature-barra-panel-scroll" foi criada, permitindo visualizar os commits associados a essa branch.
Realizando um Pull Request
- Para integrar as modificações da branch feature à master, o usuário deve criar um pull request (PR), que é uma prática comum em ambientes colaborativos.
- Ao criar o PR, é possível adicionar um título e descrição detalhada das mudanças realizadas, facilitando a revisão por outros desenvolvedores.
Verificação de Qualidade do Código
- O GitHub executa automaticamente alguns testes e verificações (checks) para garantir que as alterações não introduzam erros ou quebras no código existente.
Merge de Pull Requests
- Após a criação do PR, o usuário pode optar por realizar um merge normal ou usar a opção "squash and merge", que compacta todos os commits em um único commit para manter o histórico mais limpo.
- O rebase não será abordado neste vídeo; o foco está na execução do merge.
Sincronização com a Branch Principal
- Após realizar o merge, é necessário puxar as últimas alterações da branch master para garantir que o repositório local esteja atualizado com as modificações feitas por outros colaboradores.
Resolução de Conflitos
- Um conflito pode ocorrer quando duas pessoas fazem alterações na mesma linha de código. O vídeo demonstra como isso acontece na prática ao tentar mesclar branches diferentes.
Exemplo Prático de Conflito
- O usuário cria uma nova branch para alterar a cor principal do projeto. Enquanto isso, outro desenvolvedor altera a mesma propriedade em outra branch e realiza o merge antes dele.
- Quando tenta fazer seu próprio merge, ele descobre que não pode prosseguir devido ao conflito gerado pelas mudanças simultâneas nas mesmas linhas.
Git e Resolução de Conflitos
Identificação de Conflitos no GitHub
- O GitHub identifica conflitos quando duas pessoas tentam modificar a mesma parte do código. O conflito é apresentado entre as mudanças atuais (current change) e as mudanças que se deseja fazer (incoming change).
- É possível resolver o conflito diretamente na interface do GitHub, embora essa abordagem possa ser considerada pouco prática.
Processo de Merge e Resolução de Conflitos
- Ao realizar um merge da branch master, pode ocorrer um conflito entre as alterações feitas na branch atual e as que foram feitas em master.
- O usuário pode optar por deletar manualmente a linha conflitante ou utilizar ferramentas disponíveis no IDE para facilitar a resolução do conflito.
Finalizando o Merge
- Após resolver o conflito, é necessário sincronizar as mudanças, gerando automaticamente um novo commit. Isso permite que o merge seja finalizado com sucesso.
- A opção "squash and merge" permite combinar múltiplos commits em um único commit, simplificando o histórico do projeto.
Importância do Git para Programadores
- O vídeo oferece uma visão geral sobre os principais conceitos do Git, enfatizando sua importância não apenas para quem trabalha com inteligência artificial, mas para todos os programadores.
- Ter controle sobre versões de código proporciona segurança ao programador, permitindo reverter alterações indesejadas facilmente.
Encerramento e Convite à Interação
- O apresentador convida os espectadores a se inscreverem no canal e interagirem nos comentários caso desejem mais conteúdos avançados sobre Git.