Introdução ao Git - Semac 2016

82
Introdução ao Git

Transcript of Introdução ao Git - Semac 2016

Page 1: Introdução ao Git - Semac 2016

Introdução ao Git

Page 2: Introdução ao Git - Semac 2016

1. Quem sou eu?

$ git config user.name "Victor Hugo Souza" $ git config user.email "[email protected]" $ git config user.github "/vhbsouza" $ git config user.work "Accurate Software Ltda." $ git config user.skills "Java, Ruby, PHP, Angular, Git"

Page 3: Introdução ao Git - Semac 2016

2. Agenda

Page 4: Introdução ao Git - Semac 2016

3. O que é o Git? 

Page 5: Introdução ao Git - Semac 2016

3.1 Controle de Versão

Page 6: Introdução ao Git - Semac 2016

3.1.1 Sistema de Controle de Versão Local

Page 7: Introdução ao Git - Semac 2016

 Como trabalhar em equipe se a ferramenta é pra usolocal?

Page 8: Introdução ao Git - Semac 2016

3.1.2 Sistema de Controle de VersãoCentralizado

Page 9: Introdução ao Git - Semac 2016

 Ponto único de falha já que qualquer problema noservidor, perde‐se tudo!

Page 10: Introdução ao Git - Semac 2016

3.1.3 Sistema de Controle de VersãoDescentralizado

Page 11: Introdução ao Git - Semac 2016

 Cada cliente possui uma cópia completa dorepositório!

Page 12: Introdução ao Git - Semac 2016

3.2 História do

Page 13: Introdução ao Git - Semac 2016

Eu sou um desgraçado egocêntrico, então batizotodos os meus projetos com meu nome. PrimeiroLinux, agora Git.

-- Linus Torvalds

““

Page 14: Introdução ao Git - Semac 2016

 

2005

Page 15: Introdução ao Git - Semac 2016

3.3 Principais Caracterís�cas

Page 16: Introdução ao Git - Semac 2016

3.3.1 Snapshots ao invés de patches

Patches (Lista de Mudanças entre arquivos)

Page 17: Introdução ao Git - Semac 2016

3.3.1 Snapshots ao invés de patches

Snapshots ("Foto" do repositório inteiro)

Page 18: Introdução ao Git - Semac 2016

3.3.2 Maioria das operações sãolocais

 Sem LOCK em arquivos   

 Sem necessidade de rede para:  COMMITS, LOG, DIFF

Page 19: Introdução ao Git - Semac 2016

3.3.3 Git   integridade dos dados

Checksum ‐ Hash SHA‐1 24b9da6552252987aa493b52f8696cd6d3b00373

Page 20: Introdução ao Git - Semac 2016

3.3.4 Os Três Estados

Estado Área Descrição

Modified WorkingDirectory

Arquivo modi�cado queainda não foi consolidado

Staged StagingArea

Arquivo modi�cado que éselecionado para próx.

consolidação "Commit"

Commited HEAD

GitDirectory

Arquivos consolidados"commitados" no

Repositório

Page 21: Introdução ao Git - Semac 2016

3.3.4 Os Três Estados

Page 22: Introdução ao Git - Semac 2016

3.4 Vantagens e DesvantagensVantagens DesvantagensRápido Maior complexidade

Independência (Descentralizado)

Maior necessidade deestudo para um uso efetivo

Rami�cações

Page 24: Introdução ao Git - Semac 2016

4. Instalação

Page 25: Introdução ao Git - Semac 2016

4.1 Windows 

Git for Windowsh�ps://git‐for‐windows.github.io/

Page 26: Introdução ao Git - Semac 2016

4.2 OSXHomebrew

$ brew install git

h�p://brew.sh/

Page 27: Introdução ao Git - Semac 2016

4.3 Linux   Debian/Ubuntu

$ sudo apt-get install git

Fedora$ dnf install git

ArchLinux$ pacman -S git

Demais distros ...https://git-scm.com/download/linux

Page 28: Introdução ao Git - Semac 2016

4.3.1 Auto Completar

$ cd ~ $ wget "https://goo.gl/hhzDgN" -O ".git-completion.bash" $ echo "source ~/.git-completion.bash" >> .bashrc

Page 29: Introdução ao Git - Semac 2016

5. Github

h�p://github.com

Page 30: Introdução ao Git - Semac 2016

Adeus enviar código por

Page 31: Introdução ao Git - Semac 2016

5.1 Criar Conta

5.2 Criar Repositório

Page 32: Introdução ao Git - Semac 2016

5.3 Adicionar chave SSH no Github$ ls -al ~/.ssh $ ssh-keygen -t rsa -b 4096 -C "[email protected]" $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/id_rsa $ sudo apt-get install xclip $ xclip -sel clip < ~/.ssh/id_rsa.pub

Inserir em Se�ngs > SSH and GPG keys > AddSSH key

Page 33: Introdução ao Git - Semac 2016

5.4 Github Students Pack

h�ps://educa�on.github.com/pack

Page 34: Introdução ao Git - Semac 2016

6. Git Básico

Page 35: Introdução ao Git - Semac 2016

6.0 Ajuda$ git help [comando]

ex.:  git help init

Page 36: Introdução ao Git - Semac 2016

6.1 Configurar Git$ git config [options]

.gitconfig

Page 37: Introdução ao Git - Semac 2016

6.1.1 Configurar Usuário$ git config --global user.name "Linus Torvalds" $ git config --global user.name "[email protected]"

6.1.2 Cache ‐ Login$ git config --global credential.helper cache $ git config --global credential.helper \ 'cache --timeout=7200'

Adicione --global para de�nir escopo decon�guração à nível de usuário.

Page 38: Introdução ao Git - Semac 2016

6.1.3 Configurar MERGETOOL$ git config --global merge.tool meld

6.1.3 Verificar configuração$ git config --global user.name > Victor Hugo Souza

Page 39: Introdução ao Git - Semac 2016

6.1.3 Listar Configurações$ git config --list user.name=Victor Hugo Souza [email protected] merge.tool=meld credential.helper=cache --timeout=36000 log.decorate=short color.ui=auto color.interactive=auto color.diff=auto color.branch=auto color.status=auto pager.show-branch=true format.numbered=auto push.default=simple

--global também pode ser adicionado aqui.

Page 40: Introdução ao Git - Semac 2016

6.2 Criar RepositórioInicia repositório git dentro do diretório

$ git init

.git

Page 41: Introdução ao Git - Semac 2016

6.3 Clonar RepositórioFaz cópia do repositório

$ git clone [options][url_do_repositorio] [diretorio]

HTTPS  ou  SSH

Page 42: Introdução ao Git - Semac 2016

6.3 git clone [op�ons] [diretorio]Opção Descrição--branch

Clona a partir de branch especí�ca

--depth

Clona até um nivel de "profundidade" nohistórico do repositório

Se não for especi�cado diretório ele utilizará opadrão

Page 43: Introdução ao Git - Semac 2016

6.4 AddAdiciona arquivos para próximo snapshot(commit)

$ git add [options] <pathspec>

Page 44: Introdução ao Git - Semac 2016

6.4 git add [op�ons] <pathspec>

git add trabalho_*.c

Opção Descrição-n, --dry-run

Simula o que aconteceria se o comandofosse executado

-p, --patch

Adiciona interativamente trechos de um arquivo

-A, --all git add *

Working Directory   Staging Area

Page 45: Introdução ao Git - Semac 2016

6.5 CommitConsolida dados selecionados para o repositório

$ git commit [options] <pathspec>

Page 46: Introdução ao Git - Semac 2016

6.5 git commit [op�ons] <pathspec>Opção Descrição-m, --message

Mensagem obrigatória

--amend Recuperar ultimo commit

-p, --patch

Adiciona interativamente trechos de um arquivo

-A, --all git commit

Staging Area   Git Directory

Page 47: Introdução ao Git - Semac 2016

6.6 TagsReferências a pontos importantes do projeto

git tag

git tag -a v1.4 -m 'my version 1.4'

Page 48: Introdução ao Git - Semac 2016

6.7 StatusLista arquivos modificados em relação a ul�ma versão

$ git status [options] <pathspec>

Page 49: Introdução ao Git - Semac 2016

6.7 git status [op�ons] <pathspec>Opção Descrição-s, --short

Versão resumida do git status

--ignored

Exibe arquivos ignorados

-vvExibe a diferença de conteúdo entre osarquivos

Page 50: Introdução ao Git - Semac 2016

6.8 LogLista histórico de modificações consolidadas

"commitadas" do projeto

$ git log [options]

Page 51: Introdução ao Git - Semac 2016

6.8 git log [op�ons]Opção Descrição-n <limit> Limita numero de commits

-p <limit> Exibe diff do commit

--oneline Versão condensada do histórico

--statLista quais arquivos e nro delinhas alteradas

--author="<name>"

Lista commits por autor

$ git log --graph --decorate --oneline

Page 52: Introdução ao Git - Semac 2016

6.9 DiffExibe diferença entre versões dos arquivos

$ git diff [options]

git diff 1234a 987d2

Page 53: Introdução ao Git - Semac 2016

6.9 git diff [op�ons]

$ git diff diff --git a/benchmarks.rb b/benchmarks.rb index 3cb747f..da65585 100644 --- a/benchmarks.rb +++ b/benchmarks.rb @@ -36,6 +36,10 @@ def main @commit.parents[0].parents[0].parents[0] end + run_code(x, 'commits 1') do + git.commits.size+ end + run_code(x, 'commits 2') do log = git.commits('master', 15) log.size

Page 54: Introdução ao Git - Semac 2016

6.10 StashSalva modificações em andamento em um rascunho

git stash [options] [config]

git stash apply stash@{0}

Page 55: Introdução ao Git - Semac 2016

6.10 git stash [op�ons] [config]Opção Descriçãolist Lista rascunhos disponiveis

show Exibe conteúdo de rascunho selecionado

save Salva modi�cações em novo rascunho

applyExibe a diferença de conteúdo entre osarquivos

branchCria rami�cação com conteúdo dorascunho

clear Remove todos os rascunhos

Page 56: Introdução ao Git - Semac 2016

6.10 git stash [op�ons] [config]Config Descrição-u Incluir arquivos não monitorados

--all Inclui arquivos ignorados no rascunho

--patch

Escolhe interativamente trechos que irãopara o rascunho

Page 57: Introdução ao Git - Semac 2016

6.10 git stash [op�ons] [config]

Tracked Files

Untracked Files

IgnoredFiles

git stash

git stash ­u

git stash ­a

git stash options

Page 58: Introdução ao Git - Semac 2016

6.11 Ignorando ArquivosAdicione um arquivo  .gitignore  para definir o que será

ignorado pelo git.

Page 59: Introdução ao Git - Semac 2016

6.11 Ignorando Arquivos# Este é um comentário build/ #diretório *.[oa] # ignora terminados em .o ou .a # mas rastreie lib.a, mesmo que você tenha ignorado # arquivos terminados em .a acima !lib.a *.class *.exe doc/*.txt

 Ignorando arquivo já versionado:

git rm --cached [nome_arquivo]

Page 60: Introdução ao Git - Semac 2016

6.12 BranchRamificações que permitem modificações independentes

git branch

git branch <name>

git branch -d <name>

git branch -m <new-name>

git checkout -b <new-name>

Page 61: Introdução ao Git - Semac 2016

6.12 Branch

Page 62: Introdução ao Git - Semac 2016

6.13 Ciclo de Vida

Page 63: Introdução ao Git - Semac 2016

6.13 Ciclo de Vida

Page 64: Introdução ao Git - Semac 2016

7. Desfazendo modificações

Page 65: Introdução ao Git - Semac 2016

7.1 CheckoutDescartando alterações da Working Directory

$ git checkout -- <nome_arquivo>

git checkout 123ade

git checkout 452eac trabalho.c

Page 66: Introdução ao Git - Semac 2016

7.2 ResetDescartando alterações reescrevendo histórico

$ git reset HEAD <nome_arquivo>

Page 67: Introdução ao Git - Semac 2016

7.2 git reset <commit> [op�ons]Op�ons Descrição

--hardDesfaz alterações descartando WorkingDirectory

--softDesfaz alterações preservandomodi�cações

--patchEscolhe interativamente trechos queirão para o rascunho

Page 68: Introdução ao Git - Semac 2016

7.3 RevertDescartando alterações sem remover histórico

(patching)

$ git revert <commit> [options]

Page 69: Introdução ao Git - Semac 2016

7.3.1 Revert vs Reset

Page 70: Introdução ao Git - Semac 2016

8. Colaboração

Page 71: Introdução ao Git - Semac 2016

8.1 RemoteAdiciona repositorio remoto ao projeto

git remote add <name> <url>

git remote rm <name>

git remote rename <old-name> <new-name>

Page 72: Introdução ao Git - Semac 2016

8.2 FetchImporta commits de repositório remoto para local

git fetch <remote>

git fetch <remote> <branch>

Page 73: Introdução ao Git - Semac 2016

8.3 MergeMesclando commits

git merge <remote>/<branch>

Page 74: Introdução ao Git - Semac 2016

8.3 Merge  <master>     <outro>$ git checkout master

$ git merge origin/outro

Page 75: Introdução ao Git - Semac 2016

8.4 PullFetch + Merge

git pull <remote>

git pull <remote> <branch>

git pull --rebase <remote>  

Page 76: Introdução ao Git - Semac 2016

8.4 Pull

Page 77: Introdução ao Git - Semac 2016

8.4 Pull

Page 78: Introdução ao Git - Semac 2016

8.4 Pull

Page 79: Introdução ao Git - Semac 2016

8.5 PushEnviando commits para repositório remoto

git push -u <remote> <branch>

git push origin v1.5

git push origin --tags

git push :<branch-name>

Page 80: Introdução ao Git - Semac 2016

8.6 Ciclo de Vida ‐ Remote

Page 81: Introdução ao Git - Semac 2016

9 GitKraken

h�ps://www.gitkraken.com/

Page 82: Introdução ao Git - Semac 2016

Obrigado