Oficina de Git e Github SchumannLabs 🔗
Este repositório foi criado para servir como material de apoio em uma oficina sobre Git e Github feita na @schumannlabs.
- Oficina de Git e Github SchumannLabs 🔗
- 📑 Sumário
- 🔰 Iniciando
- ⚙️ Configurando Git
- 📥 Baixando um repositório
- 🌲 Branches
- 📄 Manipulando arquivos no git
- ➕📁🌲 Criando repositórios Git
- 📣 FAQ
- 🔎 Going Deeper
- 👥 Autores
- 📚 Referências
- Instale o Git em seu computador: https://git-scm.com/downloads/, caso queira utilizar uma interface gráfica para usar o Git, recomendo o Github Desktop: https://desktop.github.com/.
- Crie uma conta no Github - https://github.com/join;
- Caso esteja usando Github Desktop, faça login que ele irá configurar o git com suas credenciais;
- Caso esteja usando o Git via CLI na próxima secção tem os comandos que serão necessários;
Como funcionam repositórios git ? Local é a versão do repositório que está baixada na máquina (e.g. Seu Computador), Remote é o repositório que está no servidor (e.g. Github);
Ref: https://phpenthusiast.com/blog/the-essentials-of-git-and-github-for-web-developers
Ref: https://www.slideshare.net/tchelinux/git-em-pequenos-projetos-sandro-custdio-tchelinux-livramento-2019
Veja: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Ao modificar configurações do git, pode-se escolher o escopo destas, seja no repositório onde a pasta .git/ está, ou para todos os repositórios git no computador;
E.g. Configurando um mesmo user.name para todos repositórios git no computador:
> git config --global user.name "exemploschumann"
No exemplo acima todos repositórios git usaram o user.name exemploschumann para se comunicar com o repositório origem.
E.g. Configurando um email para apenas um repositório:
C:/Users/exemplo/Documents/oficina-git> git config user.email "exemplo1@schumann.com.br"
O user.name e user.email são obrigatórios para usar o git, porém existem várias outras configurações que podem ser alteradas, pode-se vê-las usando:
git config --list
Veja: https://git-scm.com/docs/git-config
Para baixar um repositório git para sua máquina é precisar fazer um Git Clone, que cria uma versão do que está na nuvem em sua máquina local.
Veja: https://git-scm.com/docs/git-clone
Após isso, abra o terminal (cmd, powershell, ...) navegue até onde tu quer baixar este repositório e rode o seguinte comando:
Para poder baixar repositórios privados, e realizar mudanças no repositório remoto, é necessário se autenticar, recomendo criar e adicionar uma chave SSH ao Github: https://docs.github.com/pt/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
http://guides.beanstalkapp.com/version-control/git-on-windows.html
git clone git@github.com:schumannlabs/oficina-git.git
- Vá em File -> Clone Repository (Ou pressione: Ctrl + Shift + O);
- Selecione URL -> Adicione a URL deste repositório, escolha o local onde o repositório será baixado.
Pode se definir cruamente, como se Branches fossem 'cópias' do projeto de um determinado ponto (commit)
Mas isso significa que o projeto vai ter tamanho de multiplicado pelo número de branches que ele tiver ?
Não. Pois o git trabalha com referências.
Veja:
Veja:
- Site para treinar uso de branches: https://learngitbranching.js.org/?locale=pt_BR
- https://git-scm.com/docs/git-branch
- https://git-scm.com/docs/git-checkout
- https://git-scm.com/docs/git-switch
- https://git-scm.com/docs/git-merge
- https://git-scm.com/docs/git-mergetool
- https://git-scm.com/docs/git-log
- https://git-scm.com/docs/git-stash
- https://git-scm.com/docs/git-tag
- https://git-scm.com/docs/git-worktree
Suponde que você está em um repositório que possui vários branches, pode-se alterar localmente a versão dos arquivos de acordo com o branch usando o seguinte comando:
git checkout homologation
Quando vai se criar um novo branch, deve-se dizer à partir de qual este será criado.
Pode-se utilizar o checkout para criar um novo branch a partir do atual:
git checkout -b feature/9221
- Vá em Branch -> New Branch (Ou pressione: Ctrl + Shift + N);
- Digite o nome do novo branch, ex: feature/nomeBranch e selecione a partir de qual branch esse será criado.
git push -u origin HEAD
-u = --set-upstream
git branch -d feature/9221
- Vá em Branch -> Delete Branch (Ou pressione: Ctrl + Shift + D);
- Confirme na caixa de dialogo que quer deleter.
git push origin --delete feature/9221
- Vá em Branch -> Delete Branch (Ou pressione: Ctrl + Shift + D);
- Digite o nome do novo branch, ex: feature/nomeBranch e selecione a partir de qual branch esse será criado.
Para explicar manipulação de arquivos vou usar a forma que este artigo fez.
Imagine que a área de staging do git é como uma caixa que está na sua mesa, onde tu pode adicionar objetos, seja um por vez, ou todos, para isso usamos o git add.
Veja: https://git-scm.com/docs/git-add
git add gambiarra/4952.cpp
git add .
ou
git add -A
O equivalente ao git add, são as caixas de seleção dos arquivos:
Os que estão selecionados irão para staging area, como se fosse um git add nestes.
Quando você tem uma caixa que está com objetos, para envia-las para o depósito se faz necessário fecha-la e rotular a mesma, para isso usa-se o git commit.
git commit -m "Título do Rótulo da caixa" -m "Mais informações sobre a caixa no rótulo" -m "Pode-se usar o -m várias vezes, ele cria como se fossem paragráfos a cada novo -m" -m "Lembre-se de escrever títulos curtos e descritivos no título do commit"
Hack: Você pode também simplesmente ao invés de usar o git add para adicionar cuidadosamente os itens na "caixa" usar a flag -a no commit sem ter usado o git add antes, que é como se você passasse o braço na mesa jogasse todos os itens dela na caixa, já colocar fechar e rotular ela.
git commit -a -m "Jogando tudo da mesa na caixa" -m "Literalmente adicionando toda e qualquer mudança que ocorreu no Working Directory para o repositório"
Veja: https://git-scm.com/docs/git-commit
Para realizar um commit, basta preencher a mensagem de commit, colocar descrição ou co-autor caso queira e então clicar em commit:
Os que estão selecionados irão para staging area, como se fosse um git add nestes.
É como se você pegasse todas as caixas que estão prontas para serem transportadas e as entregasse para um serviço que vai "magicamente" criar cópias delas e leva-las ao seu depósito, para fazer isso deve-se usar o git push
git push
Obs. O serviço que vai entregar essas mudanças vai conferir primeiro se o que enviou pode ser entregue, pois pode ser que exista conflitos.
Para realizar um commit, basta preencher a mensagem de commit, colocar descrição ou co-autor caso queira e então clicar em commit:
Os que estão selecionados irão para staging area, como se fosse um git add nestes.
Para ver o que tem na caixa que está na sua mesa, nas caixas que estão ao seu redor, ou em ambas usa-se o comando git status:
git status
Veja: https://git-scm.com/docs/git-status
As mudanças no seu repositório, são visíveis na barra lateral esquerda, no mesmo local onde tu escolhe se vai adicionar ou não a mudança do arquivo ao próximo commit:
Lembra do depósito que foi comentado antes (repositório remoto), quando é preciso trazer as coisas que estão nele para você (repositório local) pode-se usar dois comandos git fetch ou git pull, mas qual a diferença ?
O git fetch verifica as mudanças que ocorreram no depósito, e traz apenas as que não vão conflitar com as locais, é como se as caixas que estão aqui, apenas fossem ganhar novos objetos, e não perder nenhum.
Veja: https://git-scm.com/docs/git-fetch
Já o git pull traz todas as mudanças que ocorreram lá, podendo remover objetos, ou mudar estes que estão localmente.
Veja: https://git-scm.com/docs/git-fetch
- Vá em Repository -> Pull (Ou pressione: Ctrl + Shift + P);
Basta clicar em Fetch:
Como eu crio um repositório Git local 🏠 ? Para isso utiliza-se o comando git init dentro de uma pasta, que irá "transformar" essa em um repositório Git.
git init
- Vá em File -> New Repository (Ou pressione Ctrl + N)
- Preencha as informações, e seleciona as opções que deseja.
Devemos seguir a arquitetura do Git, para isso é necessário um repositório remoto, como estamos usando Github nesta oficina, deve-se criar um repositório lá e dizer para nosso repositório local que aquele é o remoto, para isso usamos o git add remote:
git add remote https://github.com/nomeDoSeuUsuario/nomeDoRepositorioRemoto
Com o repositório local criado e selecionado pelo Github Desktop, será possível criar o Remoto usando o atalho Ctrl + P, ou clicando em uma das opções de publicar o mesmo:
Agora tu pode já manipular os arquivos, por exemplo adicionando (git add) algo ao repositório local, commitando (git commit) e então enviando eles ao remoto (git push).
Não
- Git: Uma ferramenta de controle de versão distribuído;
- Github: Plataforma de hospedagem de códigos fontes/arquivos que usa o Git para controle de versão, além de servir também como um comunidade.
- Explicação das estruturas computacionais/matemáticas que o git usa em sua construção: https://stackoverflow.com/a/18588431;
- Página estilo slide de Conceitos do Git Simplificados: https://gitolite.com/gcs#(1);
- Git for Computer Scientists https://eagain.net/articles/git-for-computer-scientists/.
Criador da primeira versão do material da primeira oficina sobre o assunto.
Caso tenha alguma dúvida basta mandar um email ou me contatar pelos meios de comunicação usados pela SchumannLabs, basta pesquisar por Ruan Pato ou Ruan Guerra.
- Git Docs - https://git-scm.com/docs;
- Github Docs - https://docs.github.com/pt/github/getting-started-with-github/quickstart;
Imagens:
Links Uteis:
- Cursos sobre uso de Git e Github: https://lab.github.com/;