ferramenta git

46
Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ Introdução ao Git Felipe dos Santos Silveira SECCOM 2012 17 de Outubro de 2012

Upload: pet-computacao

Post on 24-May-2015

997 views

Category:

Education


0 download

DESCRIPTION

Git é uma ferramenta de controle de versão distribuída que é muito usada em projetos open source e que propõe ser eficiente e simples. O minicurso terá um caráter prático, abordando as principais ações, problemas encontrados (conflitos) e uso de servidores remotos (github).

TRANSCRIPT

Page 1: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Introdução ao Git

Felipe dos Santos Silveira

SECCOM 2012

17 de Outubro de 2012

Page 2: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Histórico

Criado por Linus Torvalds para desenvolvimento do Kernel Linux

DistribuídoApto ao desenvolvimento não linearTrabalha eficientemente (tempo e espaço) com projetosgrandes

Page 3: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Características

Armazena snapshots de arquivos e não diferença entre versõesMaioria das operações são locaisMantém integridade (via hashes SHA-1)Dados só são adicionados ao repositório

Page 4: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Estados de modificações

Existem 3 estados em que uma modificação pode estar

Working directoryMudanças, arquivos adicionados, arquivos removidos.

Staging areaSnapshots de coisas do Working directory que serão commitados.

RepositórioAqui ficam armazenados os commits feitos. De maneira geral, elesnão são mais editados.

Page 5: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Estrutura de um commit

Um commit é composto por três partes:Autor, informações do commiter, dataUm snapshot dos arquivos do repositórioUma mensagem de commitUma lista de commits do qual ele derivou

À partir dessas informações é calculado o hash SHA-1, que é usadopara identificar unicamente esse commit.

Page 6: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Exemplo de commits

Page 7: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Instalação

Veja como instalar na sua distribuição/sistema operacional no siteoficial: git-scm.com/downloads

Page 8: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Configuração

Antes de começar a trabalhar precisamos nos identificar.Para isso usamos o comando git config

Definindo variáveis de usuáriogit config --global user.name “<Seu nome>”git config --global user.email “<Seu email>”git config --global core.editor “gedit”

Page 9: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Níveis de configuração

Existem 3 níveis de configuração:

local para configurações somente para o repositório atualglobal para configurações somente para o usuário atualsystem para configurações para todos usuários do sistema

Page 10: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git help

Mostra uma tela de ajuda com descrições dos comandos.

Ajuda específicagit help <comando> Mostra uma melhor descrição e maisopções do comando selecionado.

Page 11: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git init

Um repositório é criado executando o comando git init.Agora já podemos começar o trabalho =)

Page 12: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git add

As mudanças são adicionadas na staging area utilizando ocomando git add <arquivo>

Lembre-seUm snapshot do arquivo é guardado na staging area. Caso maismodificações sejam feitas, elas precisam ser adicionadas de novo.

Page 13: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git status e git diff

Como está o nosso working directory e staging area?

O comando git status nos mostra o estado atual dorepositório, além de algumas outras dicas, que veremos embreve.O comando git diff nos mostra as diferenças entre o workingdirectory e o último commit.Para ver mudanças apenas da staging area use git diff--cached.

Page 14: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git remove

Às vezes precisamos remover um arquivo do nosso repositório.Podemos atingir esse objetivo com o comando git remove<arquivo>

CuidadoO comando git remove também deleta o arquivo do sistema.Utilize a git remove --cached <arquivo> para manter ele emdisco.

Lembre-seAs operações do git são aditivas. Logo, ainda é possível recuperar oarquivo deletado.

Page 15: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git commit

Com as mudanças adicionadas à staging area podemos fazer onosso primeiro commit com git commitO editor que configuramos com core.editor será chamado epoderemos ver as nossas mudanças e editar a nossa mensagem decommit.

Boa práticaUma boa mensagem de commit é composta de duas partesseparadas por uma linha em branco: Uma mensagem de até 80caracteres que descreve brevemente o commit. E, se necessário,uma melhor descrição do commit.

Commit messageA mensagem do commit também pode ser passada por parâmetro.git commit -m <commit message>

Page 16: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git log

A qualquer momento podemos ver como está o repositório com ocomando git log

FormataçãoA saída do comando é totalmente configurável. Não esqueça de veras opções com git help log.

Page 17: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Referências

Como você deve ter percebido, todos os commits são referenciadospor seus hashes. Porém, podemos usar um modo mais amigável dereferenciá-los. Para isso, usamos Referências, que são ponteirospara commits. Existem 3 tipos de referências:

tag: Um ponteiro para um commit específico. Ela não semove sob qualquer circunstância.branch: Um ponteiro para uma “linha” de commits. Éatualizado quando há um novo commit no branch.

Page 18: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

HEAD

HEAD é a referência para onde estamos. Pode estar em doisestados:

Apontando para um branch. Assim, os commits feitos à partirde HEAD atualizarão o ponteiro do branch.Apontando para uma tag ou commit. Esse estado é chamadode detached HEAD e os commits feitos só serão alcançáveisà partir de seus hashes.

Page 19: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Um repositório com referências

Page 20: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git checkout

Move o ponteiro de HEAD para a o destino especificado (branch,tag, commit)

Obtendo um arquivo de outro commitPara trazer para o working directory o arquivo X no commit Y,execute git checkout Y -- X.

Page 21: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git reset

Move o pointeiro do branch atual.

CuidadoO comando reset move o ponteiro do branch, e não a referência deHEAD, como o checkout. Ou seja, os commits do branch antigonão serão mais alcançados.

Page 22: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git reset --hard versao-1.0

Page 23: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Criando referências

Criando uma tag à partir do commit apontado por HEADgit tag <nome-da-tag>

Criando um branch à partir do commit apontado por HEADgit checkout -b <nome-do-branch>

Page 24: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git merge

Um “merge“ é um ponto onde duas linhas separadas se encontram.Ou seja, é a junção de dois branches para criar um commit que terádois pais.

Exemplogit merge NovaFeature

fast forwardQuando o alvo do comando for um sucessor direto do últimocommit do branch atual, o merge é chamado de fast forward esomente as referências são atualizadas.

Page 25: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Conflitos

Caso haja um conflito que o git não consiga resolver, o arquivo comconflito será alterado para que possamos tomar providências.

Lembre-seO comando git status nos dá informações sobre conflitos queocorreram.

ExemploO arquivo merge-conflict.tar.bz2 contém um exemplo de umconflito para vocês resolverem.

Page 26: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git rebase

O comando rebase nos permite aplicar nossas mudanças partindode outro commit base.

Exemplogit rebase <branch>

Page 27: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Estado inicial

Page 28: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Após algum tempo

Page 29: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Após: git rebase master

Page 30: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Mais rebase

Você ainda pode usar a opção -i para editar os commits que serãoadicionados.

reword: mudar a mensagem do commitedit: parar para editar o commitsquash: junta com o commit anterior (mantém ambasmensagens)fixup: junta com o commit anterior (usa só a mensagem doanterior)

Se um linha for apagada, o commit não será usado.Os commits são aplicados de cima para baixo, e podem serreordenados à vontade.

Page 31: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git clone

O comando git clone faz uma cópia de um repositório externo paraa sua máquina.

Clonando o repositório do linux

git clone git://github.com/torvalds/linux.git

Page 32: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Sincronização

Como as operações são sempre locais, precisamos de algum modopra sincronizar os repositórios.

git fetch: apenas baixa as informações sobre os servidoresremotosgit pull: a mesma coisa que fetch, mas faz merge do branchatual com o seu respectivo remoto.git push: lança as atualizações para o servidor de todos osbranches locais que têm um branch remoto associado.

Page 33: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Referências

As referências de servidores remotos têm como prefixo o nome doremoto. E o nome do primeiro remote geralmente é “origin”.

Page 34: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git pull

Assumindo que o branch local seja “master”

Equivalente agit fetchget merge origin/master

Gera muitos commits de merge em um repositório ativo.

Page 35: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

git push

Somente commits que sejam fast forward serão atualizados noservidor.

Criando um branch remotoPor padrão, todos os branches são locais. Para criar um branch noservidor, utilize:git push -u <remote> <branch-local> (a opção -u configura oseu repositório para associar o branch remoto ao local).

Enviando tagsPor padrão as tags também são locais. Para enviar uma tag paraum servidor, utilize:git push <remote> <tag-local>.Note: A opção --tags transferirá todas as tags locais para oservidor.

Page 36: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Github

Acesse github.com

Usando SSHhttps://help.github.com/articles/generating-ssh-keysTroubleshooting

Usando HTTPShttps://help.github.com/articles/set-up-git

Page 37: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Fiz um commit errado. Como corrijo?

Depende.

Se você já deu push no commit, ele já está no servidor, logonão é uma boa idéia editá-lo.Porém, você pode criar um novo commit que desfaz amudança do commit.git revert <commit>Se você ainda não deu push temos duas opções:Editar as mudanças necessárias e “editar” o último commitusando git commit --amendCriar um novo commit. Reordenar as mudanças e juntar asmodificações com a opção fixup do comand git rebase -i

Page 38: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Sempre preciso adicionar todos os arquivos commodificações à staging area?

Não. O comando git commit -a commita todos os arquivostracked. Independentemente da staging area.

CuidadoArquivos tracked são arquivos que o git já conhece (pois você jáexecutou git add nele).Arquivos novos sempre devem ser adicionadosUso constante de git commit -a leva a commits com arquivosfaltando.

Page 39: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Como faço para ignorar um arquivo?

Crie um arquivo chamado .gitignore dentro do seu repositório ecoloque o nome do arquivo dentro dele.Várias regras são separadas por quebras de linha e são aplicadas àtodos os sub-diretórios.

manualgit help gitignore

Page 40: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Quando devo usar merge e quando devo usar rebase?

Devido à característica especial de merges criarem um commit comvários pais. É uma boa prática usar isso apenas para os casos onderealmente ocorreu a junção de dois caminhos destintos (e nãosempre que você esquecer de sincronizar com o repositório remoto).

Page 41: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

“Perdi” um commit. E agora?

Você pode usar o comando git reflog para ver os últimos estadosonde HEAD estava. Assim podendo aplicar um reset oucherry-pick.

cherry-pick?O comando git cherry-pick permite você “copiar” um commit deoutro lugar e aplicar em seu HEAD.Um novo commit será gerado com a mesmas mudanças, porém,com diferentes hashes.

Page 42: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Existe outras formas de referenciar um commit?

Sim. Você pode referenciar um commit caminhando por sua “árvoregenealógica”.

Exemplo<commit>˜N Significa o N-ésimo pai do commit. <commit>˜0Significa ele mesmo.

Você também pode especificar um intervalo de commits.

Manualgit help gitrevisions

Page 43: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Essas coisas de terminal não são pra mim. E interfacegráfica, tem?

Claro =)Dê uma olhada nesse link http://git-scm.com/downloads/guis

Page 44: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Algumas coisas interessantes

git statusgit merge --ff-only / git merge --no-ffgit rebase -igit log --graph --oneline --decorate=short --date-order--allPlugin de git para o eclipsegit config --global alias.co checkoutgit config --global -e

Page 45: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Perguntas?

Contato: [email protected]

Page 46: Ferramenta git

Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ

Referências

http://git-scm.com/bookgit helpBlogs aleatórios e respostas no Stack Overflow.