72
Bruno Orlandi Git e contribuição para projetos Open Source

Minicurso Git

Embed Size (px)

Citation preview

Bruno Orlandi

Git e contribuição para projetos Open Source

Bruno Orlandi● 4º Ano Ciências de Computação – ICMC USP

● PET Computação

● HTML5 Web e Mobile

● Gosta de compartilhar conhecimento

● @BrOrlandi

Instalando

● Instalar o Git:

sudo apt­get install git● Instalar o Gitg:

sudo apt­get install gitg

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

● Identificação● Documentação● Controle● Auditoria

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

Controle de Versão resolve

● Controle de versão faz o 'merge' entre as alterações.

Distribuído

Controle de Versão

Controle de Versão

O que é Github

● Servidor de repositórios Git● Surgiu em 2008● +5 milhões de usuários

Estão no Github

Usam Git

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

Antes de começar alguns termos técnios!

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.

Vamos começar na prática!

Instalando

● Instalar o Git:

sudo apt­get install git● Instalar o Gitg:

sudo apt­get install gitg

Help

● Quando precisar de ajuda:

git help <command>

Configurando

● Configure seu nome e e­mail:

git config ­­global user.name “Meu Nome”

git config ­­global user.email [email protected]

● 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)

Estados dos arquivos

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.

Branching

Criando ramificações do repositório

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 deseja­se 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

Github e Remotes

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 e­mail configurado no git config.● Gerar chaves SSH no Linux:

https://help.github.com/articles/generating­ssh­keys

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.

Vamos praticar mais!

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.

Dúvidas?

Extras

● .gitignore● Git commit ­­ammend● Git Stash e Stash Pop● Milestones● Hooks● Github pages

Convite

● Palestras● Minicursos● Concursos● Prêmios● Feira de recrutamento

● http://semcomp.icmc.usp.br/● facebook.com/semcomp

Contato

● @BrOrlandi● [email protected]● www.slideshare.net/BrunoOrlandi

Obrigado!São Carlos - 2014

Obrigado!