minicurso git
Post on 20-Aug-2015
695 Views
Preview:
TRANSCRIPT
Bruno Orlandi● 4º Ano Ciências de Computação – ICMC USP
● PET Computação
● HTML5 Web e Mobile
● Gosta de compartilhar conhecimento
● @BrOrlandi
Sobre o Minicurso
● Não será abordado a parte técnica do Git.
● Objetivo aprender Git e sua utilidade na prática!
● Dúvidas e correções a qualquer momento!
Conteúdo
● Visão Geral● Comandos Básicos● Publicando e Colaborando● Trabalho em Equipe● Praticar● Praticar● Praticar
O que é Git-SCM
● Sistema de Controle de Versão Distribuído● SCM Software Configuration Management→● Criado por Linus Torvalds (2005)● Auxiliar no Desenvolvimento do Linux
Gerência de Configuração de Software
● Durante o desenvolvimento do software queremos saber:
– O que mudou e quando?– Por que mudou?– Quem fez a mudança?– Podemos reproduzir esta mudança?
Gerência de Configuração de Software
● Artefatos:
– Código fonte– Documentação do Software– Manual de Usuário
Problema exemplo
● Você precisa editar um site hospedado em um servidor
● Você faz o download via FTP● Faz as alterações necessárias● Manda os arquivos alterados para o servidor
via FTP
Problema exemplo
● Agora outro desenvolvedor também deve fazer alterações no site
● Baixa o mesmo arquivo junto com você● Edita e manda para o servidor depois de você● Sobrescreve suas alterações
Alternativas
● Subversion (SVN)● Mercurial● CVS Concurrent Versioning System● Bazaar
● Git é o mais rápido e eficiente
Servidores
Servidores/Suporte git Mercurial SVN
Github V
Bitbucket V V
SourceForge V V V
Google Code V V V
Termos
● Repositório: onde são armazenados todos os arquivos do projeto.
● Commit: registro de alterações realizadas. Como se fosse um “checkpoint”.
● Branch: ramificação do projeto, uma linha de desenvolvimento diferente
Termos
● Merge: incorporar alterações realizadas ou unir branchs.
● Fork: bifurcação, uma cópia do projeto. Ubuntu é um fork do Debian.
● Push: enviar as alterações para um repositório remoto.
● Pull e Fetch: baixar as alterações feitas de um repositório remoto. Pull realiza o merge.
Configurando
● Configure seu nome e email:
git config global user.name “Meu Nome”
git config global user.email meuemail@email.com
● Configure cores no terminal:
git config global color.ui true
Criando o Primeiro Repositório
git init PrimeiroRepo
● Será criado o diretório com o novo repositório vazio.
cd PrimeiroRepo
● Todas as configurações do repositório ficam na pasta .git
Crie seu primeiro arquivo
● Crie um arquivo, edite e adicione ao repositório:
touch PrimeiroArquivo
gedit PrimeiroArquivo
git add PrimeiroArquivo
git commit m “Criado o primeiro arquivo.”
Estados dos arquivos
● Não monitorado (untracked)● Modificado (modified)● Preparado (staged)● Consolidado (commited)
Status dos arquivos
● Use o comando:
git status● Exibe alterações desde o último commit● Exibe os arquivos:
– Modificados– Preparados para o Commit– Novos que não estão no repositório
Status dos arquivos
● Edite o arquivo criado anteriormente● Crie um novo arquivo e veja o seu status no
repositório
Explicando os comandos usados
git add <lista de arquivos>
● Adiciona os arquivos novos e modificados na Staging Area, preparados para o próximo Commit.
● git add all
● git add *.txt
● git add folder/*.txt
● git add folder/
● git add “*.txt”
Explicando comandos usados
git commit [m “Message”]
● Registra o commit de todos os arquivos que estão na Staging Area.
● Se o parametro de mensagem não for passado abrirá um editor de texto para escrever a mensagem
● git config global core.editor gedit
Git Workflow
● Basicamente a maior parte do trabalho com o git consiste nestas tarefas:
– Editar– Commitar
● Exercite estes comandos!
Log e Show
git log
● Lista os commits mais recentes.
git log –pretty=oneline
git shortlog
git show [commit]
● Mostra as alterações de um commit● Commit deve ser especificado pela chave● Sem parâmetro mostra o ultimo commit
Dif
git diff
● Exibir diferenças entre commits e branchs
git diff [path]
● Diferença no diretório
git diff HEAD~1 HEAD
● Mostra o que foi alterado no último commit
Ferramenta externa Dif
git config global merge.tool kdiff3
● Permite usar uma ferramenta externa para usar no Diff e também no Merge.
Git Blame
● Encontrar os culpados pelas alterações em um arquivo.
git blame <arquivo> L 10,15
● Vai exibir das linhas 10 a 15 quem escreveu elas.
Git mv e rm
● Git não trata perfeitamente arquivos renomeados ou movidos.
git mv <path1> <path2>
git rm <file>
● Remove um arquivo do repositório.● A diferença é que essas alterações já são
adicionadas ao staging.
Desfazendo alterações
git checkout <path_or_file>
● Irá desfazer todas as alterações que não estejam no Stage desde o último commit.
git checkout HEAD <path_file>
● Desfazer as alterações desde o último commit incluindo o Stage.
Git reset
git reset <file>
● Remove um novo arquivo da staging area.● Não serve para desfazer alterações, para isso
use: checkout
● Possui outras funcionalidades.
Git checkout
git checkout <commit_id>
● Irá trocar HEAD para apontar para o commit.● Altera o repositório para o estado daquele
commit.● Útil para fazer testes antes e depois de
alterações.
git checkout master
● Para voltar o HEAD à posição normal.
Git Revert
● Reverter um commit pode ser bastante útil.
git revert <commit_id>● Irá criar um novo commit que desfaz as
alterações do commit especificado.
Branch
● É uma ramificação do repositório● Alterações(commits) ocorrem na branch● Muito útil para trabalhos colaborativos● Branchs de desenvolvimento facilitam o
controle
git branch
Branching
git branch new_branch
git checkout new_branch
● Cria e troca para uma nova branch
● É possível comparar branchs com diff:
git diff master new_branch
Merge
● Uma tarefa muito comum com branchs é realizar o merge com outra branch.
git checkout master
git merge new_branch
● Excluir uma branch:
git branch d new_branch
Git Rebase
● Quando a Branch pai sofre alterações e desejase aplicar estas alterações para Branchs filhas.
● Branchs filhas devem realizar o rebase:
git rebase master
● Pode acontecer conflitos!
Conflitos
● Conflitos podem acontecer ao unirmos alterações
● Acontecem quando ramificações diferentes possuem as mesmas linhas nos mesmos arquivos editadas diferentes
Merge com Conflito
● Ao tentar fazer o Merge se houver conflitos será acusado e anotado nos arquivos.
● O repositório fica em estado aguardando você consertar os conflitos manualmente.
● Após isso deve ser feito um commit indicando que o conflito foi resolvido.
Tag
● Útil para definir versões estáveis do projeto.● Semelhante a Branch porém não sofre mais
alterações.● Guarda o estado atual da branch.
git tag [nome da tag]
git push <remote> <tag>
Interfaces Gráficas GUI
● Pelo terminal se faz tudo.● Interfaces gráficas ajudam na visualização e
auxiliam em algumas tarefas.● Recomendadas:
– Egit – Plugin para Eclipse– Gitg – Para Linux– SourceTree – Para Windows
● Não recomendado: Github for Windows
Remote
● Repositório remoto, hospedado em um servidor.
● São referenciados por uma URL.● Vamos trabalhar com repositório remoto no
Github.● Outra opção interessante Bitbucket.
Remote
● Podem receber vários commits.● Sincronizar o trabalho colaborativo.● Exige chave SSH.
git remote add origin <URL>
Criar conta no Github
● Acessem https://github.com/● Criem uma conta utilizando utilizando o
mesmo email configurado no git config.● Gerar chaves SSH no Linux:
https://help.github.com/articles/generatingsshkeys
Criar um repositório remoto
● Crie um repositório no Github.● Inicialize um repositório local.● Configure o repositório remoto.● Crie um arquivo README.md● Faça o upload das alterações.
Push
● Enviar alterações (commits) de uma branch para o repositório remoto.
● A primeira vez:
git push u origin master
● O envio é rejeitado se o repositório local não estiver sincronizado.
git push <remote> <branch>
git push
Pull
● Baixa as alterações do repositório remoto e realiza o Merge automático com o repositório local.
● Mantém o repositório sincronizado com os últimos commits de uma branch.
● Permite baixar novas branchs que não foram criadas localmente.
git pull
git pull <remote> <nova>
Git Clone
● Baixa o repositório remoto.● Outra forma de criar um repositório local.● Já vem com o remote configurado.
git clone <URL>
Fork no Github
● Copia um repositório remoto de outro usuário para o seu usuário no Github.
● É assim que começa a contribuição para outros projetos.
● Você teria uma cópia independente do repositório original, podendo fazer quaisquer alterações.
Issues no Github
● Tradução: Questões.● Reportar bugs.● Organizar tarefas a serem feitas.● Permite comentários dos usuários.● Pode referenciar commits.
Pull Request
● O grande simbolo de colaboração.● É quando você solicita que sua alterações
sejam unidas a uma branch no mesmo repositório ou a um repositório que sofreu o fork.
● Pull request podem ser comentados e referenciados no Github.
● Muito útil para o trabalho colaborativo.
Caso de Exemplo
● Extensão para GNOME: Desktop Scroller.● Cria uma área de rolagem entre os Desktops.● Permite configurar onde a área é ativa.● Hoje mantido por outros usuários.
Convite
● Palestras● Minicursos● Concursos● Prêmios● Feira de recrutamento
● http://semcomp.icmc.usp.br/● facebook.com/semcomp
Contato
● @BrOrlandi● brorlandi@gmail.com● www.slideshare.net/BrunoOrlandi
top related