Git controlo de_versoes
Upcoming SlideShare
Loading in...5
×
 

Git controlo de_versoes

on

  • 1,099 views

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

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

Statistics

Views

Total Views
1,099
Views on SlideShare
1,099
Embed Views
0

Actions

Likes
0
Downloads
7
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Git controlo de_versoes Git controlo de_versoes Presentation Transcript

  • Git: Controlo de Versões @botequilha
  • Agenda1. O que é isso?2. Layout dos repositórios3. Uma introdução pragmática 1. Criar / clonar repositórios 2. Ignorar ficheiros 3. Adicionar ficheiros e submeter alterações 4. Branching / merging 5. Comparar commits e consultar a história 6. Partilhar alterações 7. Stashing 8. Remote branches 9. "Desfazer" alterações
  • O que é:● desenvolvido por Linus Torvalds;● um sistema de controlo de versões (VCS);● distribuído vs centralizado; (rep. privados && rep. públicos)● commit IDs vs revision numbers;● metodologia de desenvolvimento ramificada (branches);
  • 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
  • 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
  • Criar/clonar Repositórios$> cd /path/to/project/$> git clone some-repository ● URIs 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
  • Ignorar ficheiros● criar ficheiro .gitignore na raíz da directoria do projecto● e.g.:# this is a comment# ignore foo.txt filefoo.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
  • 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>"
  • 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
  • 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
  • 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
  • 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
  • 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>
  • 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
  • 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...
  • 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
  • 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;
  • 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
  • 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>
  • Reverter alterações 1. considerar se as alterações não foram commited 2. 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
  • 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
  • Fontes● http://book.git-scm.com/● http://pragprog.com/book/pg_git/pragmatic-guide-to-git● git man pages