Resumo GIT e GITHUB
Resumo compilado das aulas de GIT e GITHUB da DIO e StartSe
O formato usará o resumo das aulas da StartSe, porém como a DIO abordou questões importantes de segurança, então esse conteúdo será acrescentado. StartSe Aula 1 Introdução
PDF
Principais controladores de versão
Controle de versão
- Nos dá uma linha do tempo do projeto (Timeline).
- Trabalha com alteração de estados do arquivo.
- Cada estado, chamamos de snapshot.
- Cada mudança realizada em um arquivo aumenta a sua versão.
- Podemos ter modificações paralelas.
- Possibilita recuperação para qualquer estado anterior.
- Podemos comparar documentos com características diferentes.
Exemplo de linha do tempo
Aula 2 Configuração do ambiente
Instalação e documentação :
PDF e material
Para ver se o git está instalado e a versão:
git version
Vamos realizar a configuração do git bash
#Vamos abrir o git bash
#Para configurar o nosso nome:
git config --global user.name "Hugo"
#Para configurar o email:
git config --global user.email "hugodiscord@outlook.com"
#Por configurar a branch
git config --global init.defaultBranch main
#OBS
#->Para saber se as configurações estão setadas use:
git config --list
Após abrir o diretório que queremos, vamos controlar a versão com git
#O comando para iniciar o git a partir do diretório é:
git init
Aula 3 Aula Ciclo de vida dos arquivos, commits e branches
PDF
Git possui 4 status (ciclos) para arquivos
- Untracked → O git não conhece a existência do arquivo em nenhuma versão (Default).
- Staged → Arquivos que estão prontos para serem inseridos em um novo estado da aplicação (Novo Snapshot).
- Unmodified → Indica arquivo que não sofreu nenhuma modificação em relação a ultima versão.
- Modified → Indica arquivos que sofreram alteração em relação a ultima versão.
Comando para ver o status dos arquivos
#Num primeiro momento todos os arquivos estarão como untraked
git status
Comando para adicionar o arquivo para estado 2 Staged
#Para subir arquivo especifico:
git add nome_do_arquivo
#Caso a intenção seja adicionar todos, vamos usar o *
git add *
#OBS
#Podemos voltar o arquivo para o estado anterior com:
git reset nome_do_arquivo
Comando para adicionar para o estado 3 Unmodified
#Vamos fazer um comentario indicando a mudança realizada com:
git commit -m "comentario_entre_as_aspas"
Para verificar os commits realizados no nosso código vamos usar:
#Comando para verificar quantidade de commits e as branchs utilizadas.
git log
Branch
- Gera ramificações do fluxo principal de trabalho.
- As ramificações geradas podem ser trabalhadas isoladamente.
- Após modificações faremos um merge para associar a linha do tempo principal.
Exemplo
Para criar nova branch:
git branch nome_da_branch
Para alterar a nossa branch de trabalho usaremos
git checkout nome_da_branch
Para associar o trabalho da branch que criamos a linha do tempo principal usamos:
git merge nome_da_branch
Aula 4 Branches na prática
PDF
Observações:
- Quando criamos uma branch o projeto será salvo na posição que estamos.
- Todas as modificações geradas numa branch são ignoradas por outras.
Para sabermos em qual branch estamos usamos :
#Esse comando vai mostrar a branch que estamos trabalhando.
#Também demostra todas as oturas banchs criadas no projeto.
git branch
Para subirmos a modificação da branch para a principal vamos usar:
git merge Nome_da_branch
#OBS:
#Quando fazermos um merge o git gera um commit automático informando a mudança.
#O commit será aberto no editor de texto para editarmos.
#Caso a nossa mudança impact alguma funcionalidade, o git irá nos informar.
#Em caso de impacto, teremos a opção de escolher o que será mantido/descartado.
Para deletar uma branch vamos usar:
git branch -d nome_da_branch
#OBS
#Geralmente depois de cumprida a finalidade, deletamos a branch
#Geralmente não fazemos commits da branch main diretamente.
Aula 5 Reset e diff na prática
PDF
DIFF
- Vai mostrar a diferença entre o arquivo atual e o estado anterior.
Para vermos a diff entre arquivos usamos:
#Nesse caso vamos ver todas as diferenças realizadas (Multiplos arquivos).
git diff
#Neste outro caso vamos ver as modificações de apenas um arquivo.
git diff nome_do_arquivo
Para voltarmos ao estado anterior a modificação vamos usar:
#Iremos indicar o nome do arquivo para voltarmos ao ponto anterior a mudança.
git checkout nome_do_arquivo
Reset
- Usado para voltar para o estagio anterior
- Pode ser usado de forma diferente dependendo do estado do arquivo.
Uso do reset na fase “staged” (Depois do “git add”)
#Caso tenhamos deixado passar mudança para staged vamos ter de resetar o estado
#O comando para reset para estado anterior é:
git reset nome_do_arquivogit reset nome_do_arquivo
Uso do reset na fase “unmodified” (Depois do “git commit”)
Aqui vamos ter 3 formas diferentes de reset:
- Reset soft (Podemos fazer commit novo)
#Volta po arquivo para fase de staged git reset --soft nome_do_commit_anterior
- Reset mixed (Podemos fazer novo git add)
#Volta o arquivo para fase de modified git reset --mixed nome_do_commit_anterior #Podemos fazer a diff da modificação com o conteúdo anterior #Antes de fazer o "git add"
- Reset hard (Desfaz tudo e volta ao estado do commit anterior)
#Vai desfazer qualquer mudança realizada desde o commit anterior. git reset --hard nome_do_commit_anterior
Aula 6 GitHub, Gitlab e bitbucket
PDF
Páginas úteis
Podemos mandar nossas modificações locais para um repositório na nuvem
Aula 7 GitHub na Prática
PDF
Aqui vamos criar um repositório no GitHub para trabalharmos com o projeto na nuvem.
Pegando o código do repositório da nuvem:
Inserindo o código no repositório local
Para conferir se inserimos corretamente o repositório
#Para apenas ver os repositórios remotos adicionados usamos:
git remote
#Para verificar o caminho dos repositórios adicionados vamos usar:
git remote -v
Agora vamos enviar nossos arquivos locais para o repositório GitHub
#Vamos usar o comando abaixo:
git push nome_do caminho branch_que_queremos_mandar
#No nosso caso fica:
git push origin main
#OBS
#Temos a opção de salvar o caminho automaticamente
git push -u origin main
#Após salvar, apenas com o push já enviaremos os arquivos automáticamente.
Caso a gente queira pegar os arquivos do projeto da nuvem
#Lembrando que temos que pegar a URL do projeto na guia "code" no GitHub.
git clone url_do_projeto
#Todos os commits e branchs irão ser carregados também.
Aula 8 Pull e Push na Prática
PDF
Git push
- Usado para enviar arquivos para o repositório do projeto
#Relembrando a forma de subir os arquivos
git push caminho_do_repositório branc_que_queremos_mandar
Git pull
- Usado para pegar atualizações feitas no projeto (de todas as branches)
#Para pegarmos atualizações futuras feitas no código vamos usar o pull
git pull caminho_do_repositório branc_que_vamos_receber
#Vamos receber as alterações, todas as branchs e commits feitos no repositório.
Aula 9 Git Merge e Rebase
PDF
Observação:
Merge e rebase são usados para unir branches
Merge
- Adiciona novo commit na time line principal indicando a junção das branches
- Gera fork do merge pra frente.
Visualização
Rebase
- Deixa a linha do tempo linear.
- Vai gerar impacto a linhas de tempo alternativas
Visualização
Aula 10 Merge e Rebase na Prática
PDF
Extensão para ver git log no vscode
Para trabalhar com as branches
#Para criar
git branch nome_da_branch_nova
#para trocar de branch
git checkout nome_da_branch
#Para visualizar a branch que estamos trabalhando
git branch
#Para voltar para a branch anterior
git checkout -
#Para criar uma branch e já mudar para ela vamos usar:
git checkout -b nome_da_branch
Para visualizarmos o fluxo dos merges e rebase vamos usar:
#Esse comando ira mostrar um log mais completo com linha do tempo na esquerda.
git log --graph
Merge
- Acaba criando novo commit para nos informar que foi feito mudança e que ela foi enviada para nossa linha do tempo principal.
#Lembrando o comando para mergiar
git merge nome_da_outra_branch
Rebase
- Após criar uma nova branch, fazemos um rebase com a branch “main” para atualizar a nossa time line. Vai trazer tudo na ordem cronológica.
- Rebase é mais usado em branches separadas (Não usar na nossa main)
#Para fazer um rebase de informações para a branch que estamos vamos fazer:
git rebase nome_da_outra_branch
Aula 11 Stash na Prática
PDF
Observações:
- Usado para salvar o estado do nosso projeto na area temporária.
- O stash será salvo na branch que realizamos a modificação.
Exemplo de uso do stash
#Salvará as alterações na area temporária.
git stash
#OBS:
#Também podemos incluir arquivos untracked no nosso stash. Ficaria:
git stash --include-untracked
Para consultar a lista com conteúdo stash salvos usaremos:
#Aqui teremos acesso a todas os "stash" salvos.
git stash list
Para incorporar as alterações temporárias vamos usar:
#Pegando as modificações da area temporaria
git stash aply
Para limpar a lista temporária vamos usar:
#Limpando lista dos "stash's"
git stash clear
Aula 12 Conhecendo o .gitignore
PDF
Paginas úteis
Observações:
- Delimita arquivos que não serão enviados para o repositório do nosso projeto
- O nome do arquivo deve ser posto dentro do documento “.gitignore” para ser ignorado.
Primeiro vamos ter de criar um arquivo dentro da pasta que estamos
#O nome do arquivo vai ser ".gitignore" (Sem apastas)
#No terminal fica:
touch .gitignore
#Também podemos criar direto do VS code com botão direito "new file".
Agora é só adicionar o nome do arquivo dentro do arquivo criado anteriormente.
#Se for pelo terminal fica:
vim .gitignore
#Também podemos fazer isso de forma facilitada pelo VSCode
Aula 13 - Git Revert na Prática
PDF
Observações:
- Desfaz a alteração na time line principal.
- Mantem a alteração na branch de origem.
- Geralmente usamos para desfazer algo na branch main.
Podemos visualizar os commits com:
#Revisando
git log
Para visualizar a mudança realizada em detalhes pelo commit vamos:
#Depois de copiar o commit no git log, iremos usar:
git show nome_do_commit
#Será mostrada toda modificação que foi gerada.
Para reverter vamos fazer
#Pegamos o id do commit que queremos reverter
git revert nome_do_commit_para_reverter
Aula 14 Workflows com Git
PDF
Observações:
Possibilita rotina de trabalho mais consistente e produtiva.
Temos 3 fluxos de trabalho diferentes
1 - Centralized
- Todos os desenvolvedores trabalham na mesma branch main.
- Facilita para ter organização na ordem de commits.
- Geralmente usado em times muito pequenos.
Modelo exemplo:
2 - Feature branch
- Cada nova funcionalidade terá uma branch especifica.
- Geralmente mais usada em times grandes.
- Nesse modelo nenhum push é feito na branch main.
Modelo exemplo:
3 - Gitflow
- Cada dev vai usar um modelo estrito de branch projetada em torno do projeto.
Modelo
Aula 15 - Workflow Centralizado na Prática
PDF
Observação:
- Neste modelo de trabalho, precisamos sempre prezar pela organização da timeline.
- Antes de fazermos push, vamos ter de fazer um pull pra organizar a cronologia do nosso trabalho (Importante !).
Primeiro vamos organizar a nossa timeline
#Nosso commit vai ficar no topo sempre.
git pull orgin main --rebase
Depois de organizada, vamos fazer o push dos nossos commits
#Lembrando o comando visto anteriormente:
git push origin main
Aula 16 Pull Request e Feature Branch na Prática
PDF
Pull requests (PR)
- Solicitação de merge de uma branch em outra branch.
- Geralmente usada para passar conteúdo de uma branch nossa para a main do nosso repositório remoto.
- O processo de solicitação request permite que a modificação do código passe por uma avaliação antes do merge.
Fases até o pull request
- Vamos criar uma branch da funcionalidade e fazer as mudanças.
- Vamos fazer o git add e depois fazer o commit da mudança.
- Vamos fazer o pull para o repositório remoto informando a branch
git push nome_do_rep_remoto nome_da_branch_que_queremos_enviar
- Agora vamos ir na página do projeto e clicar no pool request
- Na página de request, vamos informar pra qual branch estamos querendo mandar o conteúdo.
- Podemos fazer uma descrição do request e comentar o que foi feito
- Podemos marcar os revisores do código (Na opção a direita).
- Podemos fazer sugestão para melhoria dos requests
Aula 17 Resolvendo Conflitos na Prática
PDF
Exemplo de conflito
No conflito temos 3 opções:
Accept both changes
- Vai incluir as 2 modificações paralelamente.
Accept incoming changes
- Vai aceitar a melhoria proposta pela outra branch.
Accept current changes
- Vai aceitar a melhoria proposta pela branch que estamos.
Após fazer a escolha da melhor opção vamos ter de fazer o git continuar
Depois de adicionar, vamos ter de continuar com o rebase ou merge
Se o conflito for no rebase vamos usar:
git rebase --continue
Se o conflito foi no merge vamos usar
git merge --continue
Aula 18 Adicionando o site no Github Pages
PDF
Observações:
- Podemos hospedar nosso projeto para gerar link externo.
- Só consigo hospedar projetos que contem HTML, CSS e JavaScript
Para hospedarmos temos que fazer:
DIO
Tópicos fundamentais para entender o funcionamento do Git
- Entendendo como o Git funciona por baixo dos panos.
Sha1
A sigla SHA significa Secure Hash Algorithm, que é um conjunto de funcões hash criptográficas projetadas pela NSA (Agência Nacional de Segurança dos EUA) Essa encriptação gera um conjunto de caracteres identificadores com 40 dígitos.
- Exemplos práticos de Sha1 Vamos criar um bloco de notas com o nome texto. E dentro desse desse bloco de notas, vamos escrever “Olá, meu nome é Hugo”
Agora vamos gerar a chave criptográfica do bloco de notas com o comando “openssl sha1” O comando será escrito da seguinte forma:
Então é gerado uma chave criptografada do arquivo de texto no estado atual.
E se mudarmos o arquivo? Vamos adicionar uma excalamação no final, deixando “Olá, meu nome é Hugo!”
Vamos usar novamente o comando:
openssl sha1 texto.txt
openssl sha1 texto.txt
Com isso podemos ver que uma chave diferente foi gerada. devido ao ponto de exclamação no final que alterou o estado do arquivo.
E se mudarmos o arquivo mais uma vez?
Novamente gera uma chave diferente.
Então se eu mudar de volta para o estado inicial do primeiro exemplo, a chave de identificação volta ao mesmo estado também.
Gerando chaves SSH e Token
- Chave SSH A chave SSH é a autenticação da sua máquina no Github, você gera uma chave SSH para declarar a sua máquina para o seu perfil no Github como máquina confiável. Ideal para maquinas pessoais ou máquinas que somente você usa em uma empresa, pois não pede autenticações de senha durante o uso do Git e Github em conjunto. Tornando o processo mais fácil e até mais seguro do que digitando a senha durante o uso. Como gerar a chave?
ssh-keygen -t ed25519 -C hugodiscord@outlook.com
Observações: O ed25519 é o tipo de criptografia de segurança usada na chave, há outros tipos criptografias usados como o ed448 por exemplo, mas a mais usada, mais atual e considerada mais segura é a ed25519. O Email é o do Github. E o -C é usado maiúsculo mesmo.
Essa parte será digitavel, é onde você poderá escolher o local/repositório onde a sua chave vai ficar armazenada. Caso aperte Enter sem digitar nada, ela irá para o repositório padrão conforme o ilustrado na imagem.
Se for mudar o diretório, é ideal que saiba o que está fazendo. Por enquanto faremos o procedimento na pasta padrão mesmo.
O .ssh com espaço e ponto antes do nome “ssh” simboliza uma pasta oculta.
Aqui vai pedir para digitar uma senha e depois confirmar essa senha. Observação: Essa senha é a senha de acesso do arquivo da chave e não a senha do Github. Após as confirmações, irá para a tela da imagem logo a seguir:
A suas chaves públicas e privadas foram geradas e salvas no diretório especificado acima. (/c/Users…. ) O SHA256 é a criptografia da sua chave SSH E a arte aleatória criptográfica da sua chave.
Então agora vamos ver a chave nos diretórios
Usaremos o cd para ir no diretório da chave e o ls para vermos as chaves salvas no diretório. Lembrando que será a chave publica que vamos expor no Github. Então usaremos um comando para pegarmos o código na chave pública.
cat id_ed25519.pub
Você receberá esse desde o ssh-ed25519, , código enorme e com o email no final, você copiará tudo, incluindo o e-mail e será usado no Github.
Ok, agora vamos ao Github. E faremos o seguinte caminho: Clique na sua foto no canto superior direto > Settings > e na parte esquerda selecione SSH and GPG Keys.
No Titile você vai dar um nome para o seu PC E no Key você vai usar o código copiado.
E aqui você terá a confirmação da sua chave salva. E por fim os últimos passos no Git. Primeiro você vai usar o comando
eval $(ssh-agent -s)
Sera gerado um Agent Pid de alguns algarismos que é o começo do processo. E por fim o comando:
ssh-add id_ed25519
- Token Por fim o Token de acesso pessoal, que é a sua chave da conta por Token. Faça o seguinte caminho: Developer Settings > Personal acess tokens > Generate new token Então na opção Note, você dará o nome da sua Token, escolherá a data de Expiração para essa Token e terá outras opções de segurança da Token. Por enquanto só é necessário marcar a opção repo Você cria a chave e você receberá um código dessa chave. Observação: O Github só te vai mostrar essa chave uma ÚNICA vez, então tenha certeza de guardar em um local bem seguro.