SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Git: Controlo de Versões
        @botequilha
Agenda

1. O que é isso?
2. Layout dos repositórios
3. 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 ID's 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

 ● 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
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
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 = origin
merge = 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

Contenu connexe

Tendances

Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Tchelinux
 
Curso front-end - Aula 003 - Comandos git
Curso front-end - Aula 003 - Comandos git Curso front-end - Aula 003 - Comandos git
Curso front-end - Aula 003 - Comandos git Andréa Zambrana
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao GitOto Junior
 
Git - GitHub
Git - GitHubGit - GitHub
Git - GitHubWagner
 
Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonAlysson Ajackson
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Jonathan Célio
 
O Fantástico Mundo de Git
O Fantástico Mundo de GitO Fantástico Mundo de Git
O Fantástico Mundo de GitMatheus Fidelis
 
Git workshop
Git workshopGit workshop
Git workshopYuri Reis
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Mauro George
 

Tendances (17)

Git
GitGit
Git
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Introdução ao Git
Introdução ao Git   Introdução ao Git
Introdução ao Git
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Curso front-end - Aula 003 - Comandos git
Curso front-end - Aula 003 - Comandos git Curso front-end - Aula 003 - Comandos git
Curso front-end - Aula 003 - Comandos git
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Git - GitHub
Git - GitHubGit - GitHub
Git - GitHub
 
Git 101
Git 101Git 101
Git 101
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao git
 
Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson Ajackson
 
Git - Não perca o que estava funcionando!
Git - Não perca o que estava funcionando!Git - Não perca o que estava funcionando!
Git - Não perca o que estava funcionando!
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos
 
O Fantástico Mundo de Git
O Fantástico Mundo de GitO Fantástico Mundo de Git
O Fantástico Mundo de Git
 
Git workshop
Git workshopGit workshop
Git workshop
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
 

En vedette

エンジニア取扱説明書
エンジニア取扱説明書エンジニア取扱説明書
エンジニア取扱説明書Hisanao Ichikawa
 
WordPressと静的ページで構成する(特殊な)ハイブリッドサイト
WordPressと静的ページで構成する(特殊な)ハイブリッドサイトWordPressと静的ページで構成する(特殊な)ハイブリッドサイト
WordPressと静的ページで構成する(特殊な)ハイブリッドサイトHiromu Hasegawa
 
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントSlideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントTaichi Hirano
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピングwariemon
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識Tsutomu Sogitani
 

En vedette (6)

エンジニア取扱説明書
エンジニア取扱説明書エンジニア取扱説明書
エンジニア取扱説明書
 
WordPressと静的ページで構成する(特殊な)ハイブリッドサイト
WordPressと静的ページで構成する(特殊な)ハイブリッドサイトWordPressと静的ページで構成する(特殊な)ハイブリッドサイト
WordPressと静的ページで構成する(特殊な)ハイブリッドサイト
 
Manual SlideShare
Manual SlideShareManual SlideShare
Manual SlideShare
 
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントSlideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピング
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 

Similaire à Git controlo de_versoes

Similaire à Git controlo de_versoes (20)

Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Git
GitGit
Git
 
github-git-cheat-sheet.pdf
github-git-cheat-sheet.pdfgithub-git-cheat-sheet.pdf
github-git-cheat-sheet.pdf
 
Conhecendo o GIT
Conhecendo o GITConhecendo o GIT
Conhecendo o GIT
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET Computação
 
GIT SCM
GIT SCMGIT SCM
GIT SCM
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficiente
 
Git + git hub
Git + git hubGit + git hub
Git + git hub
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
Controle de versionamento com Git
Controle de versionamento com GitControle de versionamento com Git
Controle de versionamento com Git
 
GIT - Hands-On
GIT - Hands-On GIT - Hands-On
GIT - Hands-On
 
Git flow no projeto
Git flow no projetoGit flow no projeto
Git flow no projeto
 
Controle de versão e colaboração com Git
Controle de versão e colaboração com GitControle de versão e colaboração com Git
Controle de versão e colaboração com Git
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em pazViajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
 
Git
GitGit
Git
 
Git - Visão Geral
Git - Visão GeralGit - Visão Geral
Git - Visão Geral
 

Git controlo de_versoes

  • 1. Git: Controlo de Versões @botequilha
  • 2. Agenda 1. O que é isso? 2. Layout dos repositórios 3. 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
  • 3. 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);
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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>"
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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>
  • 14. 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
  • 15. 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...
  • 16. 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 = origin merge = refs/heads/master
  • 17. 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;
  • 18. 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
  • 19. 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>
  • 20. 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
  • 21. 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