Introdução ao Git e GitHub
Git
Controle de versão
O que é?
Um sistema de controle de versão ou Version Control System (VCS) é um programa que possui como objetivo controlar as versões de um projeto.
Um pouco de história...
Antigamente, um projeto era hospedado em apenas um servidor local, correndo o risco de se caso o servidor der algum problema, todo o projeto seria perdido. Com o Git, as cópias do projeto são clonadas localmente na máquina de cada desenvolvedor.
O que é Git?
O Git é um sistema de controle de versão distribuído que permite que desenvolvedores rastreiem mudanças em arquivos e colaborem em projetos de software. Ele foi criado por Linus Torvalds em 2005 para ajudar no desenvolvimento do kernel do Linux. O Git permite que múltiplos desenvolvedores trabalhem simultaneamente em um projeto, mantendo um histórico completo de todas as alterações feitas.
A documentação oficial do Git pode ser encontrada aqui.
Termos comuns
Alguns termos que são usados comumente no Git:
- Working Tree ou Árvore de Trabalho: Diretórios e arquivos que contém o projeto que está sendo trabalhado/desenvolvido no momento.
- Repositório (repo) O diretório ou a pasta localizado no topo da árvore de trabalho e é onde o Git guarda todo o histórico do proketo. Basicamente a pasta principal do projeto. Um bare repository é um repositório que não faz parte de uma árvore de trabalho e é usado para compartilhamento ou backup e é geralmente salvo com a extensão .git
- Hash: É uma função que retorna um número e que representa os conteúdos de um arquivo. Como se fosse um ID.
- Commit: A tradução pode ser como comprometer-se ou entregar. No Git, siginifica pulblicar ou enviar alguma coissa ou mudança para que os outros possam ver.
- Branch: Significa ramificação e no Git, representa uma série ou um ramo com vários
commits. O commit mais recente em uma branch é chamado de Head e a branch
padrão/principal é chamada de
mainoumaster. O head ou o commit mais recente da branch que você está atual é chamado deHEAD. - Remoto: Um remoto é uma referência a um repositório Git. É como se tivesse um repositório
remoto e outro local. O nome padrão é
origin.
Git vs GitHub
Git é um sistema de controle de versão distribuído (Distributed Version Control System (DVCS)).
GitHub é uma plataforma em nuvem que hospeda os repositórios Git.
Comandos
- Login: Obrigatório para poder enviar as alterações para o GitHub.
git config --global user.name "Seu Nome"git config --global user.email "seu.email@example.com" - Verificar versão: Exibe a versão do Git instalada.
git --version - Listar configurações globais:
git config --list - Inicializar um repositório Git: Caso você já tenha uma pasta no seu pc e queira
transformar ela em um repositório Git.
git init -b main//inicia e cria uma branch chamada main - Verificar status da árvore de trabalho:
git status - Ajuda: Lista todos os comandos git e dá uma breve explicação do que cada um faz.
git help// ougit "comando" help// mostra ajuda sobre o comando em específico - Preparar alterações para serem commitadas:Adiciona/rastreia um ou mais arquivos
para serem preparados para o commit.
git add "nome-do-arquivo"// adiciona um arquivo específicogit add .// adiciona todos os arquivos modificados - Fazer um commit: Salva as alterações feitas no repositório local.
git commit -m "mensagem-descritiva"// faz o commit com uma mensagem descritiva - Ver logs:
git log// mostra o histórico de commits - Ver o histórico de commits de um arquivo em específico:
git blame "nome-do-arquivo"// mostra o histórico de commits do arquivo especificado, com hora, data e autor de cada linha
GitHub
O GitHub é uma plataforma de hospedagem de código-fonte e controle de versão que utiliza o Git como sistema de controle de versão. Ele permite que desenvolvedores colaborem em projetos, compartilhem código e gerenciem versões de software de forma eficiente.
O site oficial do GitHub pode ser encontrado aqui.
Veremos a partir de agora as funcionalidades principais do GitHub.
Repositórios
Um repositório contém todos os arquivos do seu projeto com cada alteração e histórico de versões.
Possui três tipos:
- Público (qualquer um tem acesso)
- Privado (só você tem acesso)
- Interno (visível para apenas os membros da empresa/organização)
Como clonar um repositório
- No seu repositório GitHub, tem um botão chamativo escrito Code.
- Ao apertar nele, irá ser
mostrado um link que você precisa copiar.
- No seu terminal, na pasta onde você quer salvar o seu clone, digite assim:
git clone "url-copiada"
// e depois:
cd "nome_do_repositorio"
Gists
Gists é uma funcionalidade do GitHub que permite aos usuários compartilhar trechos de códigos, notas ou outras informações menores que são compartilhados em um grupo pequeno.
Geralmente são usados para compartilhar exemplos de códigos ou soluções, guardar configurações ou scripts de uso pessoal, guardar templates de algo, compartilhar logs e compartilhar trechos de código em blogs, foruns, etc.
OBS.: Os Gists não são totalmente privados, mesmo os secretos podem ser acessados por quem tem o link.
Para clonar um Gist, é praticamente a mesma coisa de clonar um repositório comum.
Wiki
Wiki são como se fosse uma documentação de algo. Geralmente uma wiki serve para documentar as informações detalhadas do projeto, enquanto que um README seria uma leitura mais rápida e direta sobre o projeto. É praticamente a Wikipédia daquele projeto.
Preview de uma nova feature
São funcionalidades novas que ainda estão em desenvolvimento que podem ser habilitadas caso você queira testar. É interessante dar uma olhada pois o GitHub adiciona novas funcionalidades frequentemente.
Pull Requests
Uma pull request ou PR é uma funcionalidade que permite que commits enviados por outra pessoa sejam mesclados na branch principal do projeto.
É como se fosse um fórum que a pessoa manda a alteração e fala o que fez e porque essa alteração deve ser adicionada. O administrador do repositório pode olhar isso e analisar se deve aceitar as alterações que a pessoa fez ou não.
Uma solicitação de pull (PR) compara alterações entre dois branches:
- Comparar é a branch das alterações.
- Base ou Main é pra onde essas alterações vão.
Mesclar um PR
Existem 3 opções ao você mesclar uma branch:
Create a merge commit/Criar um commit de mesclagem: É a função padrão onde todas as modificações são mescladas e é criado um commit dizendo que foi mesclado.Sqaush and merge/Esmagar e mesclar: Todas as modificações são mescladas mas é criado apenas um commit com todas as alterações juntas.Rebase and merge/Rebase e mesclar: As modificações são mescladas mas os commits são reaplicados na branch base, criando um histórico linear.
Issues
Uma issue é usada para rastrear ideias, feedbacks, tarefas ou bugs/poblemas envolvendo seu trabalho no GitHub. Como se fosse um fórum onde você pode expor algo relacionado ao projeto. Diferente de uma PR, uma issue apenas expoe e o erro, ou o feed back sem modificar diretamente o código.
Discussões
Tem assuntos que são grandes demais para serem colocados em uma issue, por isso existem as discussões, onde você pode conversar com as pessoas sobre diversos assuntos como se fosse um Reddit. No seu repositório, você pode habilitar as discussões ou não.
Cada discussão pode ser atribuída à uma categoria, entre elas:
- Anúncios: Atualizações e novidades sobre o projeto.
- Geral: Tudo relacionado e relevante para o projeto.
- Ideias: Sugestões e ideias para melhorar o projeto.
- Polls: Votações.
- Q&A: Perguntas e respostas para a comunidade responder.
- Show and tell: Criações, experimentos ou testes relevantes para o projeto.
Os administradores do repositorio podem administrar as disussões e podem fixar as discussões importantes no topo. Também podem marcar perguntas que foram feitas pela couminidade como respondidas.
Uma discussão também pode ser convertida para uma issue.
Fluxo de trabalho do GitHub
O GitHub possui um fluxo de trabalho. Ele se baseia diretamente nas funcionalidades essenciais do Git.
Estados de um arquivo
Um arquivo pode ter diferentes estados:
- Untracked ou não rastreado: Estado inicial do arquivo quando ele ainda não foi preparado para nada. Basicamente o Git não vê ele e não sabe de sua existência.
- Tracked ou rastreado: Um arquivo rastreado é quando o Git percebe ele e agora está monitorando/rastreando esse arquivo.
- Unmodified ou não modificado: O arquivo está sendo rastreado mas desde o último commit não teve nenhuma alteração.
- Modified ou modificado: Em relação ao último commit, esse arquivo foi modificado mas as suas alterações ainda não foram rastreadas.
- Staged ou preparado: O arquivo foi modificado e as alterações foram adicionadas na área de preparação e essas alterações estão prontas para serem commitadas.
- Committed: O arquivo está na database do repositório e representa a última versão commitada do arquivo no momento.
Fluxo de trabalho do Git
É um modelo de fluxo de trabalho que é usado principalmente em projetos grandes, demorados e que
envolve muitos desenvolvedores. O fluxo interno de desenvolvimento contém várias branches de
desenvolvimento e uma principal (main ou master).
masteroumain: Sempre reflete na versão final/completa do projeto (v. 1.0; v. 2.0; etc)develop: Branch onde o desenvolvimento ativo acontece. A branch principal é atualizada a partir dessa branch.feature/"nome_feature": Usada para criar novas funcionalidades e é clonada/derivada da branchdevelope é mesclada a ela quando é finalizada.release/"nome_versao": Usada para preparar uma nova versão de produção. É derivada da branchdevelope, após os ajustes finais, é mesclada nas branchesmainedevelop.hotfix/"nome_versao": Usada rapidamente para corrigir bugs críticos em produção. É derivada da branchmaine, após a correção, é mesclada nas branchesmainedevelop.
GitHub Pages
É um serviço que é usado para publicar e hospedar seu reposiório e transformá-lo em um website estático usando HTML, CSS e JavaScript.
OBS: Só são suportados HTML, CSS e JavaScript. Qualquer outro front ou back end como Python, Django, SQL não vao ser hospedados no GitHub Pages.
Como criar um site com o seu repositório e hospedar no GitHub Pages
O Jekyll é um gerador de site estático que o GitHub usa para criar um site com base no conteúdo do seu repositório.
Front matter YAML
Esse termo se refere aos metadados YAML que precedem o conteúdo de um arquivo. Para o Jekyll, essas dados incluem instruções para indicar o estilo do layout de uma página markdown. Também pode incluir dados da página como o título, variáveis, etc.
Para personalizar o site, é preciso editar o arquivo _config.yml. Saiba mais.
Editando
O Jekyll dá suporte à linguagem do modelo Liquid, ou seja, é possível adicionar variáveis e fluxos de lógica (if, for, while) dentro do markdown/html:
Exemplo de um looping for:
Nesse artigo mostra mais infomações de como adicionar conteúdo ao seu site usando o Jekyll.
Pesquisa do GitHub
A barra de pesquisa do GitHub possui diversos métodos para pesquisar sobre algo. Você pode pesquisar dentro de um repositório em especifico ou procurar em todo o GitHub. Os resultados abrangem tudo, incluindo código, issues, marketplace, usuários, etc.
É possível colocar alguns filtros na hora da pesquisa, como esses:
Para mais ajuda de como pesquisar coisas específicas com filtros, este artigo fala mais sobre.
Caso você queira uma coisa mais específica e mais complexa, pode usar a pesquisa avançada do GitHub.
Marcos/milestones e rótulos/labels
Os marcos permitem agrupar issues e PRs em uma categoria.
- Os marcos podem ser ordenados (assim como os projetos), facilitando as prioridades e a visualização de quais marcos são mais importantes.
- Acompanhamento automático do progresso de cada etapa, mostrando quantas questões ou pRs estão concluidas e etc.
- Acompanhar o trabalho que entra das versões ou fases do projeto
Você pode atribuir um rótulo à uma Issue ou PR e é útil na hora da pesquisa:
is:open is:issue label:"bug"
// mostra todas as issues abertas com o rótulo bug