git controlo de_versoes

22
Git: Controlo de Versões @botequilha

Upload: ricardo-soares

Post on 27-Jun-2015

755 views

Category:

Documents


3 download

DESCRIPTION

[PT] Uma introdução ao controlo de versões utilizando Git.

TRANSCRIPT

Page 1: Git controlo de_versoes

Git: Controlo de Versões

@botequilha

Page 2: Git controlo de_versoes

Agenda

1. O que é isso?2. Layout dos repositórios3. Uma introdução pragmática

1. Criar / clonar repositórios2. Ignorar ficheiros3. Adicionar ficheiros e submeter alterações4. Branching / merging5. Comparar commits e consultar a história6. Partilhar alterações7. Stashing8. Remote branches9. "Desfazer" alterações

Page 3: Git controlo de_versoes

O que é:

● desenvolvido por Linus Torvalds;

● um sistema de controlo de versões (VCS);

● distribuído vs centralizado; (rep. privados && rep. públicos)

● commit ID's vs revision numbers;

● metodologia de desenvolvimento ramificada (branches);

Page 4: Git controlo de_versoes

Layout dos repositórios

Uma configuração típica, com repositórios locais privados e repositórios públicos.

Os layouts podem ser uma mistura entre as configurações centralizada e distribuída.

Fonte: Pragmatic Guide to Git -2010 Swicegood, Travis

Page 5: Git controlo de_versoes

Criar/clonar Repositórios

● �criar uma nova directoria .git na directoria actual● inicializar o repositório Git

$> cd /path/to/project/$> git init

● o repositório é inicializado uma única vez● pode ser apagado da mesma forma que qualquer outra directoria

Page 6: Git controlo de_versoes

Criar/clonar Repositórios$> cd /path/to/project/$> git clone some-repository

● URI's válidos p/ o comando git clone: user@ssh_host:path_to_repo git://some_domain/path_to_repo http://some_domain/path_to_repo https://some_domain/path_to_repo

$> git clone --depth <x> some-repository

● shallow copies● copia apenas os últimos x commits do repositório● não pode ser clonado

Page 7: Git controlo de_versoes

Ignorar ficheiros● criar ficheiro .gitignore na raíz da directoria do projecto● e.g.:

# this is a comment # ignore foo.txt file foo.txt

# ignore generated pyc files *.pyc # but do not ignore bar.pyc !bar.pyc

# ignore all directories *.[a]

● ignorar ficheiros relativamente a um repositório: .git/info/exclude

Page 8: Git controlo de_versoes

Adicionar Ficheiros e Submeter Alterações

● adicionar ficheiros ao index do repositório$> git add <some-file>

● os ficheiros ficam staged e prontos para integrarem um commit

● consultar o estado do index$> git status

● apresenta também info. sobre a relação entre o repositório e os restantes ficheiros

● submeter as alterações$> git commit -m "<message>"

Page 9: Git controlo de_versoes

Branching / Merging● um repositório pode conter múltiplos branches de

desenvolvimento$> git branch <branchname>

● o nome do branch pode ser definido como uma path$> git branch author/dev-type/what_to_do

● �listar branches locais$> git branch$> *master$> author/dev-type/what_to_do

● listar todos os branches (locais e remotos)$> git branch -a$> *master$> author/dev-type/what_to_do$> remotes/origin/master

Page 10: Git controlo de_versoes

Branching / Merging

● mudar de branch$> git checkout <branchname>

● as alterações só são visíveis no branch actual● para aplicá-las noutro branch é necessário fazer merge

$> git checkout <other-branchname>$> git merge <branchname>

● se tudo correr bem, as alterações serão incorporadas no branch actual

● caso contrário, surgirão conflitos que necessitarão de ser resolvidos

Page 11: Git controlo de_versoes

Comparar commits e consultar a história

● comparar commits permite ver o que realmente foi alterado● podem comparar-se quaisquer dois pontos da história do

projecto

● consultar alterações feitas mas que ainda não foram staged$> git diff

● consultar alterações que foram staged (mas não commited)$> git diff --cached

● comparar alterações com o último commit (HEAD)$> git diff HEAD

Page 12: Git controlo de_versoes

Comparar commits e consultar a história

● comparar as alterações actuais com o estado (último commit) de outro branch

$> git diff <branchname>

● comparar HEAD com as alterações actuais, limitando apenas a 1 ficheiro

$> git diff HEAD -- ./animals/models.py

● comparar alterações com o último commit (HEAD)$> git diff HEAD

● obter um sumário de todas as alterações actuais$> git diff --stat

Page 13: Git controlo de_versoes

Comparar commits e consultar a história

● finalmente, a comparação pode ser feita entre quaisquer dois commits...

$> git diff <commit X>..<commit Y>

● ...ou entre quaisquer dois commits e o seu atepassado comum

$> git diff <commit X>...<commit Y>

Page 14: Git controlo de_versoes

Comparar commits e consultar a história

● consultar a história do repositório$> git log

● o comando permite várias opções de consulta ● e. g: commits desde um branch específico

$> git log v1.0..

● commits desde uma data específica$> git log --since="2 weeks ago"

● mostrar que ficheiros foram alterados, nº de linhas removidas / adicionadas, em cada commit

$> git log --stat

Page 15: Git controlo de_versoes

Partilhar alterações● �actualizar repositório privado

$> git fetch <remote name>

● não é feito merge das alterações● permite comparar as alterações antes de efectuar

um merge$> git diff <local branch> <remote branch>

● em alternativa$> git pull <remote name>

● combina fetch e merge num só comando● é útil (tipo mágico!), mas pode dar algumas dores de

cabeça...

Page 16: Git controlo de_versoes

Partilhar alterações● �enviar alterações para branch remoto

$> git push [<local name>] [<remote name>]

● pode-se evitar introduzir os nomes do branch local e remoto, configurando o ficheiro .git/config

● e.g.:

[remote "origin"]fetch = +refs/heads/*:refs/remotes/origin/*url = ssh_key:remote_repo.git[branch "master"]remote = originmerge = refs/heads/master

Page 17: Git controlo de_versoes

Partilhar alterações

● commit e share são duas tarefas distintas;

● para manter os branches locais sincronizados com os branches remotos, é necessário efectuar um git fetch;

● depois de sincronizados, é preciso fazer um merge dos branches para que as alterações fiquem disponíveis localmente;

● alternativa: git pull;

Page 18: Git controlo de_versoes

Stashing

● permite "guardar" temporariamente as alterações em curso e voltar ao estado inicial do branch

$> git stash "coding a fix"

● o index deixa de ter quaisquer alterações

● permite uma lista de stashed items$> git stash list

● as alterações podem ser recolocadas novamente no branch$> git stash apply [<stash queue item>]

● é extremamente útil em situações ad-hoc

Page 19: Git controlo de_versoes

Remote Branches● criar um branch local

$> git branch -b <branch name>

● fazer checkout para o novo branch e realizar eventuais alterações

● o novo branch é submetido com push$> git push <remote name> <branch name>

● um branch remoto pode também ser apagado$> git push <remote name> :<branch name>

● apaga o branch no repositório remoto; é necessário apagá--lo no repositório local

$> git branch -d <branch name>

Page 20: Git controlo de_versoes

Reverter alterações1. considerar se as alterações não foram commited2. considerar se as alterações já foram commited

● no primeiro caso, se o index estiver mesmo messed up$> git reset --hard HEAD

● as alterações serão todas revertidas

● mas pode-se reverter as alterações de um único ficheiro$> git reset HEAD <file name>

● o ficheiro voltará ao estado anterior

Page 21: Git controlo de_versoes

Reverter alterações● no segundo caso, se as alterações já foram commited e

eventualmente publicadas$> git revert HEAD

● as alterações serão revertidas para um commit anterior e será criado um novo commit

● a mensagem de commit poderá ser alterada

Page 22: Git controlo de_versoes

Fontes

● http://book.git-scm.com/

● http://pragprog.com/book/pg_git/pragmatic-guide-to-git

● git man pages