Skip to content

Instantly share code, notes, and snippets.

@javascripto
Created July 19, 2018 17:37
Show Gist options
  • Select an option

  • Save javascripto/118282da1789205d8901d6347023e3af to your computer and use it in GitHub Desktop.

Select an option

Save javascripto/118282da1789205d8901d6347023e3af to your computer and use it in GitHub Desktop.

Anotações do mini-curso de Git e Github

Para trabalhar com git no windows faça o download do git bash e do emulador de console cmder.

Cofigurando o git:

  • Configure o seu nome e email no git
    • git config --global user.name "Yuri Alves"
    • git config --global user.email "yurialves2@gmail.com"
  • Configuração para colorir algumas interações: git config --global color.ui true

Criando primeiro repositorio para trabalhar com versionamento git

mkdir aulagit   # Cria diretório
cd aulagit      # Acessa o diretório
git init        # Inicia repositório git e cria um diretório oculto (.git) 
                # Para deixar de trabalhar com o git basta apagar o diretório (.git)

Os 3 estagios

Cada arquivo adicionado ou modificado em um diretorio que trabalha com o versionamento git passa por 3 estagios.

  1. Estágio untracked file: Indica quais arquivos não estão fazendo parte do versionamento.
  2. Estágio changes to be commited: Indica quais arquivos foram adicionados no versionamento mas as mudanças não foram confirmadas e salvas.
  3. Estágio commited: Indica que não há mais nada para confirmar no versionamento, está tudo ok.
touch arquivo.txt                   # Criando novo arquivo
echo 'Olá, mundo!' >> arquivo.txt   # Escrevendo no arquivo

git status                          # Mostrar status do arquivo.txt (estágio 1 - untracked)

git add arquivo.txt                 # Adiciona arquivo.txt ao versionamento (estágio 2)
git rm --cached arquivo.txt         # Retorna estagio de arquivo.txt para untracked
git add .                           # Adiciona todo o diretorio atual e seus arquivos ao versionamento (estágio 2)
git commit -m "meu primeiro commit" # Confirma alterações fazendo commit (estágio 3)

git log                             # Mostra log de commit
  • Status

Para saber o estagio atual dos arquivos existe o comando git status

  • Commit

Parametro -m significa mensagem. Commit = persistir mudanças, submeter alterações.

No contexto de ciência da computação e gerenciamento de dados, commit refere-se à ideia de fazer permanentes um conjunto de mudanças experimentais. Uma utilização popular está no fim de uma transação. Um commit é o ato de enviar. https://www.wikiwand.com/pt/Commit

O comando git commit pode ser feito sem o parametro -m de mensagem. Assim que for executado, o git abrirá uma janela de texto para comentar o commit. Caso seja feita a alteração em mais de um arquivo, para 'commitar' todos de uma vez de o comando: git commit -a -m "mensagem"

  • Log
git log        # Log de commit
git log -p     # Detalhes sobre o que foi alterado entre cada commit
git log -p -2  # Exibe apenas os dois ultimos logs
git log --stat # Estatisticas de log
git log --pretty=oneline # Exibe log em uma linha
git log --pretty=format:"%h - %an, %ar : %s" # Exibe log formatado de forma personalizada
git log --since=2.days

Gitignore

O arquivo .gitignore pode ser criado para especificar todos os arquivos que serão ignorados no versionamento git. Assim não serão mostrados os estagios destes arquivos e nem serão enviados na hora do push. Escreva o nome de cada arquivo que será ignorado em uma nova linha. touch .gitignore

Criando um branch (galho/ramificação)

Um branch é como se fosse uma linha do tempo alternativa para o desenvolvimento do projeto. Ela pode se desenvolver em paralelo ao branch principal (master) e no futuro podem voltar a se fundir (merge) ou gerar novos galhos. O branch master é como se fosse um tronco de uma árvore e o que deriva dele são seus galhos. Geralmente são utilizados para o desenvolvimento de uma nova funcionalidade separadamente do projeto principal.

  • git branch
  • git checkout
git branch                      # Mostra qual o branch você está trabalhando - de inicio é o branch "master"
git checkout -b funcionalidade1 # Criação do branch funcionalidade1: git checkout -b <nome do branch>
git checkout funcionalidade1    # Alterna para o branch funcionalidade1
git checkout master             # Alterna para branch master

Fusão de ramificações (merge - rebase)

Para Juntar dois branches novamente basta utilizar o comando git merge <nome do branch para fundir> ou git rebase <nome do branch para fundir>

git branch                  # Estou no branch funcionalidade1
git merge master            # Fazer merge do branch funcionalidade1 com branch master. 

git rebase funcionalidade1  # Fazer merge com commits ordenados

Se não houver commit em algum dos branches, será necessário adicionar um comentário para um novo commit após a junção das ramificações.

Rebase ordena ordem dos commits de ambos branches e nao geram um novo commit quando fundir os dois, apenas junta os commits

Resolvendo Conflitos: Pode ser que você tenha modificado arquivos em comum em ambos os branches. Neste caso haverá conflitos na hora do merge. Para saber quais arquivos estão em conflito basta usar git status e depois abrir estes arquivos para ver o que se pode fazer. Eles aparecem com o status unmerged paths.

Voltar/Alternar Versão

Cada vez que é realizado um commit, ele passa a receber um hash da versão que pode ser verificado no log. Para voltar para uma versão anterior basta usar o comando git checkout.

git log # Exibe o log de commits
git checkout b7bad0e98c1eb0021bda565a092314f7fd8800af # git checkout <hash da versão>

# Agora a versão passa a ser a escolhida pelo hash obtido no log
# O comando git checkout tambem pode ser usado referenciando o nome do branch (ramificação)

git checkout master # Voltar para a ramificação master - o galho principal do projeto
git reset HEAD~1 # Volta um commit
git reset HEAD~1 --soft # Remove commit mas deixa arquivos modificados
git reset HEAD~1 --hard # Remove commit e arquivos que não existiam antes

Outra utilidade para git reset HEAD

touch arquivo1.txt arquivo2.txt arquivo3.txt # Criando vários arquivos
git add .                                    # Adicionando todos ao versionamento
git reset HEAD arquivo1.txt                  # Voltando apenas 1 arquivo para estágio untracked 
git commit -m "Adicionei todos arquivos ao versionamento, menos 1"

GITHUB

push, pull, clone,

Chave publica e privada

Para gerar uma chave publica em sistemas unix-like, utilize o comando ssh-keygen. Esta chave será útil para não precisar ficar digitando usuario e senha sempre que você quizer faer um push em sua conta do github.

ssh-keygen      # Gerar chave
cd ~/.ssh/      # Acessar Diretório onde a chave foi salva - Nunca compartilhe as chaves privadas
cat id_rsa.pub  # Exibir conteúdo ca chave no terminal

Copie o conteúdo da chave e salve em sua conta no site do github. Acesse: github.com >> settings >> ssh and gpg keys >> new ssh key

Criar repositorio github

Para criar um novo repositório no github basta criar/fazer login em sua conta, acessar a aba repositótios e clicar nobotão new. Logo depois serão informados os comandos básicos para digitar no computador local inicializando o repositorio e executando o primeiro push.

Primeiro push

Push signifiga empurrar. É o comando que faz o upload dos arquivos locais para um repositório remoto Depois de criar um repositorio novo em minha conta github nomeado como 'repositorio-temporario', ter iniciado o repositorio localmente pelo comando 'git init' e feito os primeiros commits, é hora de configurar o repositorio remoto e fazer o push.

git remote add origin https://github.com/yuri8p/repositorio-temporario.git
git push -u origin master
# Fazer push com outro branch
git checkout funcionalidade1
git push origin funcionalidade1

Clonar Repositório

Clonar um repositório é quando você encontra um repositório no site e deseja trazê-lo para seu computador local.

git clone https://github.com/yuri8p/repositorio-temporario.git         # Clonar repositório
git clone https://github.com/yuri8p/repositorio-temporario.git aulagit # Clonar e Renomear

Clonar branch

# Para ter outro branch remoto localmente é necessario criar localmente o branch  e ligar ao branch remoto
git branch      # Só foi clonado o branch master
git branch -a   # Exibir todos os branches locais e remotos

git checkout -b funcionalidade1 origin/funcionalidade1 #Cria branch 'funcionalidade1' localmente com opção -b e faz link com branch remoto

git pull # Atualiza arquivos locais baixando do repozitorio remoto
git pull origin master # Atualiza

Pull Request

O que épull request? Pull request é uma requisição para alterar um projeto. Quando você faz clone de um repositório que não pertence a você, não é possível fazer um push sem que o dono do repositório autorize. Para contribuir com o projeto é necessário submeter um pull request e esperar a aprovação do dono do repositório.

Versionamento semântico

Versionamento semantico é uma forma organizada de gerar versões do software. Exemplo: (0.1.0), (1.0), (2.3.45).

Com a versão 0.1.0 podemos separar o versionamento em três partes: 0 = Major Version (primeiro zero). Não precisa manter compatibilidade entre as versões. Cada release pode ser um software totalmente novo. 1 = Minor Version ( versao dentro da versao). O software é o mesmo porem com implementação de alguma nova funcionalidade, compatibilidade pode ser mantida ou nao. 0 = Patch da Minor version (segundo zero) Patch de correção de bugs na minor version. A compatibilidade deve ser mantida a todo custo, apenas os bugs devem ser corrigidos e tudo tem que funcionar como antes.

Gerar Tags de release

git tag 0.1.0  # Gerar Tag de release
git tag -l  # Listar todas as tags geradas

git push origin master --tags # Fazer release no github. "1 novo release"

Comando git init --bare

Um repositorio bare é um repositório que não serve para trabalho, tem função de servir. É usado para trabalhar remotamente porém com um repositório local.

# Entre no seu diretório raiz de trabalho
cd ~/CODES/              # Diretorio qualquer raiz
mkdir aulagit-bare       # Criando diretorio que servirá de repositório 
cd ~/CODES/aulagit-bare/ # Acessando diretorio
git init --bare          # Inicializando repositorio com opção --bare
ls                       # Exibir subdiretórios gerados. São diferentes de um repositório comum de trabalho no git

# Agora entre no diretorio de trabalho com git  para adicionar lugar remoto
cd ~/CODES/aulagit/
git remote add local ssh://localhost/home/yuri/CODES/aulagit-bare/
git push local master
# Observe que agora usamos outra palavra no lugar de origin (local) - poderia ser qualquer palavra

Deploy automatizado - Git hook

O deploy automatizado serve para que quando for dado o comando de push, automaticamente serão enviados os arquivos para o ambiente de produção.

cd ~/CODES/aulagit-bare/ # Entra no repositorio de bare
cd hooks                 # Entra no diretorio hooks
touch post-receive       # Cria arquivo de post-receive
chmod +x post-receive    # Dá permisão de execução para arquivo
mkdir meusite.com.br/    # Cria pasta meusite.com.br/ que será referenciada no arquivo post-receive

Conteúdo do arquivo post-receive:

#!/bin/sh
GIT_WORK_TREE=/home/yuri/CODES/meusite.com.br git checkout -f # Opção -f Para copiar todos arquivos exceto o diretotio (.git)

Aprenda mais em:

Blog no github

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment