Giter Club home page Giter Club logo

oficina-git's Introduction

:octocat: 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.

Guia de bolso

📑 Sumário

🔰 Iniciando

  1. 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/.
  2. Crie uma conta no Github - https://github.com/join;
  3. Caso esteja usando Github Desktop, faça login que ele irá configurar o git com suas credenciais;
  4. 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);

Git Local Remote Ref: https://phpenthusiast.com/blog/the-essentials-of-git-and-github-for-web-developers

Git Areas 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

⚙️ Configurando Git

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 "[email protected]"

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

📥 Baixando um repositório

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

📥👩‍💻 Via terminal

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 [email protected]:schumannlabs/oficina-git.git

📥📺 Via Github Desktop

  1. Vá em File -> Clone Repository (Ou pressione: Ctrl + Shift + O);
  2. Selecione URL -> Adicione a URL deste repositório, escolha o local onde o repositório será baixado.

🌲 Branches

Imagem1

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:

https://git-scm.com/book/en/v2/Git-Internals-Git-References

https://www.freecodecamp.org/news/git-internals-for-curious-developers-a1e44e7ecafe/#:~:text=In%20other%20words%2C%20Git%20copies,what%20makes%20Git%20so%20quick.

Veja:

🔄🌲 Alternando entre branches

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:

🔄🌲👩‍💻 Via terminal
git checkout homologation
🔄🌲📺 Via Github Desktop

Switch branch Github Desktop

➕🌲 Criando um novo branch localmente

Quando vai se criar um novo branch, deve-se dizer à partir de qual este será criado.

➕🌲👩‍💻 Via terminal

Pode-se utilizar o checkout para criar um novo branch a partir do atual:

git checkout -b feature/9221
➕🌲📺 Via Github Desktop
  1. Vá em Branch -> New Branch (Ou pressione: Ctrl + Shift + N);
  2. Digite o nome do novo branch, ex: feature/nomeBranch e selecione a partir de qual branch esse será criado.

📤🌲 Subindo um branch Local para o remote

git push -u origin HEAD

-u = --set-upstream

📤🌲📺 Via Github Desktop

Github Desktop Publish Local Branch

🚮🌲🏠 Deletando um branch Local

git branch -d feature/9221
🚮🌲🏠📺 Via Github Desktop
  1. Vá em Branch -> Delete Branch (Ou pressione: Ctrl + Shift + D);
  2. Confirme na caixa de dialogo que quer deleter.

🚮🌲🌐 Deletando um branch remoto

git push origin --delete feature/9221
🚮🌲🌐📺 Via Github Desktop
  1. Vá em Branch -> Delete Branch (Ou pressione: Ctrl + Shift + D);
  2. Digite o nome do novo branch, ex: feature/nomeBranch e selecione a partir de qual branch esse será criado.

📄 Manipulando arquivos no git

Para explicar manipulação de arquivos vou usar a forma que este artigo fez.

➕📄 Adicionando arquivos novos ou modificados

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

Um arquivo
git add gambiarra/4952.cpp
Todos novos arquivos e mudanças
git add .

ou

git add -A
➕📄📺 Via Github Desktop

O equivalente ao git add, são as caixas de seleção dos arquivos:

Github Desktop Git add

Os que estão selecionados irão para staging area, como se fosse um git add nestes.

📦📄 Adicionando eles de fato ao repositório local

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

📦📄📺 Via Github Desktop

Para realizar um commit, basta preencher a mensagem de commit, colocar descrição ou co-autor caso queira e então clicar em commit:

Github Desktop Git Commit

Os que estão selecionados irão para staging area, como se fosse um git add nestes.

📤🚚📄 Enviando as mudanças para o repositório remoto

É 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.

📤🚚📄📺 Via Github Desktop

Para realizar um commit, basta preencher a mensagem de commit, colocar descrição ou co-autor caso queira e então clicar em commit:

Github Desktop Git Commit

Os que estão selecionados irão para staging area, como se fosse um git add nestes.

👀📄 Verificando o status do repositório local

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

👀📄📺 Via Github Desktop

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:

Github Desktop Git Status;

📥🚚📄 Trazendo mudanças do repositório remoto

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

📥🚚📄📺 Git Pull via Github Desktop
  1. Vá em Repository -> Pull (Ou pressione: Ctrl + Shift + P);
📥🚚📄📺 Git Fetch via Github Desktop

Basta clicar em Fetch:

Github Desktop Fetch

➕📁🌲 Criando repositórios Git

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

➕📁🌲📺 Criar repositório local pelo Github Desktop

  1. Vá em File -> New Repository (Ou pressione Ctrl + N)
  2. Preencha as informações, e seleciona as opções que deseja.

➕☁️📁🌲 Tá eu tenho um repositório local mais e o remoto ?

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

➕☁️📁🌲📺 Via Github Desktop

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:

Gituhub Desktop Create Remote Repository

💻 Ok, agora eu tenho um repositório local referenciado à um remoto, qual o próximo passo ?

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).

📣 FAQ

❔ Git e Github são a mesma coisa ?

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.

🔎 Going Deeper

👥 Autores

🦆 Ruan Pato

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.

📚 Referências

Imagens:

Links Uteis:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.