Introdução ao Git - Semac 2016

Post on 09-Jan-2017

348 views 2 download

Transcript of Introdução ao Git - Semac 2016

Introdução ao Git

1. Quem sou eu?

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

2. Agenda

3. O que é o Git? 

3.1 Controle de Versão

3.1.1 Sistema de Controle de Versão Local

 Como trabalhar em equipe se a ferramenta é pra usolocal?

3.1.2 Sistema de Controle de VersãoCentralizado

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

3.1.3 Sistema de Controle de VersãoDescentralizado

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

3.2 História do

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

-- Linus Torvalds

““

 

2005

3.3 Principais Caracterís�cas

3.3.1 Snapshots ao invés de patches

Patches (Lista de Mudanças entre arquivos)

3.3.1 Snapshots ao invés de patches

Snapshots ("Foto" do repositório inteiro)

3.3.2 Maioria das operações sãolocais

 Sem LOCK em arquivos   

 Sem necessidade de rede para:  COMMITS, LOG, DIFF

3.3.3 Git   integridade dos dados

Checksum ‐ Hash SHA‐1 24b9da6552252987aa493b52f8696cd6d3b00373

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

3.3.4 Os Três Estados

3.4 Vantagens e DesvantagensVantagens DesvantagensRápido Maior complexidade

Independência (Descentralizado)

Maior necessidade deestudo para um uso efetivo

Rami�cações

4. Instalação

4.1 Windows 

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

4.2 OSXHomebrew

$ brew install git

h�p://brew.sh/

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

4.3.1 Auto Completar

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

5. Github

h�p://github.com

Adeus enviar código por

5.1 Criar Conta

5.2 Criar Repositório

5.3 Adicionar chave SSH no Github$ ls -al ~/.ssh $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" $ 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

5.4 Github Students Pack

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

6. Git Básico

6.0 Ajuda$ git help [comando]

ex.:  git help init

6.1 Configurar Git$ git config [options]

.gitconfig

6.1.1 Configurar Usuário$ git config --global user.name "Linus Torvalds" $ git config --global user.name "linus@linux.com"

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.

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

6.1.3 Listar Configurações$ git config --list user.name=Victor Hugo Souza user.email=victor.souza@accurate.com.br 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.

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

$ git init

.git

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

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

HTTPS  ou  SSH

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

6.4 AddAdiciona arquivos para próximo snapshot(commit)

$ git add [options] <pathspec>

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

6.5 CommitConsolida dados selecionados para o repositório

$ git commit [options] <pathspec>

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

6.6 TagsReferências a pontos importantes do projeto

git tag

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

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

$ git status [options] <pathspec>

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

6.8 LogLista histórico de modificações consolidadas

"commitadas" do projeto

$ git log [options]

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

6.9 DiffExibe diferença entre versões dos arquivos

$ git diff [options]

git diff 1234a 987d2

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

6.10 StashSalva modificações em andamento em um rascunho

git stash [options] [config]

git stash apply stash@{0}

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

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

6.10 git stash [op�ons] [config]

Tracked Files

Untracked Files

IgnoredFiles

git stash

git stash ­u

git stash ­a

git stash options

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

ignorado pelo git.

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]

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>

6.12 Branch

6.13 Ciclo de Vida

6.13 Ciclo de Vida

7. Desfazendo modificações

7.1 CheckoutDescartando alterações da Working Directory

$ git checkout -- <nome_arquivo>

git checkout 123ade

git checkout 452eac trabalho.c

7.2 ResetDescartando alterações reescrevendo histórico

$ git reset HEAD <nome_arquivo>

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

7.3 RevertDescartando alterações sem remover histórico

(patching)

$ git revert <commit> [options]

7.3.1 Revert vs Reset

8. Colaboração

8.1 RemoteAdiciona repositorio remoto ao projeto

git remote add <name> <url>

git remote rm <name>

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

8.2 FetchImporta commits de repositório remoto para local

git fetch <remote>

git fetch <remote> <branch>

8.3 MergeMesclando commits

git merge <remote>/<branch>

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

$ git merge origin/outro

8.4 PullFetch + Merge

git pull <remote>

git pull <remote> <branch>

git pull --rebase <remote>  

8.4 Pull

8.4 Pull

8.4 Pull

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>

8.6 Ciclo de Vida ‐ Remote

9 GitKraken

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

Obrigado