Git e contribuição para projetos Open Source Bruno Orlandi
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 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)
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 s sh 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 brorlandi@gmail.com www.slideshare.net/brunoorlandi
São Carlos - 2014 Obrigado!