Introdução ao Git - Semac 2016
-
Upload
victor-souza -
Category
Technology
-
view
348 -
download
2
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 "[email protected]" $ 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
Tech Talk: Linus Torvalds on git
4. Instalação
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
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 "[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
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 "[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.
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 [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.
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
Obrigado