Entendendo GIT
April 3rd, 2009
Introdução
Vamos começar, Git é um Software Livre para controle de versäo distribuído, ou seja um software para gerenciamento de código fonte com ênfase em ser rápido. Git foi inicialmente criado por Linus Torvalds para o desenvolvimento do kernel Linux (kernel).
Cada diretório de trabalho Git é um repositório com todos os históricos e habilidade total de controle das revisões, näo dependente de acesso a uma rede ou a um servidor central.
Para mais informações clique aqui.
Instalação
Para instalar o git no debian(meu caso utilizo UBUNTU) execute o seguinte comando:
sudo aptitude install git-core git-completion git-doc git-gui gitk ssh
Agora é só configurar seu nome e email. (:
git config --global user.name "Seu Nome"
git config --global user.email "seu@mail.com.br"
Configuração
Personalizando seu terminal
Como sempre gostamos de trabalhar na agilidade nada melhor do que "atalhos", que alem de facilitar nossa vida fazem serviços rápidos, os códigos abaixo criam shortcuts no git status, git branch, git commit e git checkout.
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
Para facilitar sua visualização na hora do trabalho nada melhor do que deixar as coisas mais visiveis, você pode adicionar cores no seu terminal com os seguintes codigos:
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
Adicionando o codigo abaixo dentro de .bashrc, você terá algo parecido com:
PS1='\[\e]2;terminal \w\a\][\[\e[37;1m\]\u@\[\e[36;1m\]\h\w\[\e[33;14m\]$(__git_ps1 " %s")\[\e[0m\]]\$ '
Repositórios do Gitorious
O nosso amigo Gitorious mantem diversos repositórios listados. E para ter acesso de escrita você precisa criar uma chave pública de criptografia. Para isso rode o comando:
ssh-keygen -t rsa
Esse comando vai fazer uma série de perguntas como o tamanho da chave,seu nome e email, etc. Se você não souber a resposta para alguma pergunta não precisa se preocupar, o valor padrão deve ser o suficiente. Quando ele pedir uma passphrase, certifique-se que você não vai esquecê-la! A chave pública vai ser gerada no arquivo /.ssh/id_rsa.pub
Depois de crair a chave publica e ter o acesso permitido, você pode baixar um projeto no repositório do Gitorious com o comando abaixo:
git clone url@do_projeto.git nome_da_pasta_onde_ele_vai_ser_armazenado
Da mesma forma podemos baixar arquivos do github
git clone git://github.com/rails/rails.git nomedapasta:
Fabio Akita tem um otimo tutorial sobre o mesmo.
Comandos Básicos
Para gravar uma mudança é necessário primeiro adicioná-la ao index. Modifique alguns arquivos e então adicione seu conteúdo atualizado ao index:
git add nomedoarquivo -ou- git add .
Para ver um resumo da situação do repositório utilize:
git status
Você então deve gravar suas mudanças com:
git commit -m "mensagem descrevendo o commit"
Caso queira adicionar todos os arquivos modificados pode fazer:
git commit -a -m "mensagem descrevendo o commit"
Use o comando abaixo para enviar suas mudanças para o repositório central:
git push
Para atualizar sua cópia local, ou seja, para baixar as mudanças que outros tenham feito no repositório, use os comandos:
git pull --rebase -ou- git pull
Para apagar todas as mudanças não comitadas até o momento (deixa o seu branch limpo, mas não apaga arquivos que nunca foram comitados).
git checkout -f
Pull vs Rebase
Existem dois jeitos de importar as mudanças de um repositório remoto pro repositório local. Elas são o "pull" e o "rebase". A diferença é a forma como as mudanças locais são mantidas na hora de importar as remotas.
Imagine uma árvore de commits assim (onde local é o branch atual de desenvolvimento):
A---B---C local
/
D---E---F---G master
Após um "git pull" aplicado no computador local, a árvore fica:
A---B---C---F'--G' local
/ /
D---E---F---G ----master
Após um git push, a árvore no repositório remoto fica
A---B---C---F'--G'--
/ / \
D---E---F---G -------------A'--B'--C'--F''--G'' master
Isso não é muito interessante por serem feitos, ao todo, dois merges das mudanças locais no repositório remoto. Com mais de duas pessoas fazendo mudanças ao mesmo tempo esse método gera árvores de histórico complicadas e difíceis de entender depois, com vários merges.
Uma alternativa é usar "git pull - -rebase" em vez de "git pull". Fazendo isso, a árvore local, que era
A---B---C local
/
D---E---F---G master
fica
A'---B'---C' local
/
D---E---F---G master
Após um "git push", a árvore do servidor fica
A'---B'---C'-
/ \
D---E---F---G --------------- master
ou
D---E---F---G---A'--B'--C'----- master
o que é muito mais limpo. Mesmo com várias pessoas desenvolvendo isso tende a gerar históricos mais lineares.
Branches
Por segurança costumo trabalhar com dois branches, podemos denominar branch(ramos) como "areas de trabalho", imagine assim, onde você pode trabalhar com uma e ter outra como reposiorio "central", ou seja, sem risco se fazer algo errado e depois perder tudo ou conflitar o repositório master.
Para ver os branches do repositório basta usar o comando
git branch
Para mudar de branch usa-se o comando
git checkout
Mudando do branch master para novo-branch:
git checkout novo-branch
Conferindo o novo branch:
git branch
master
* novo-branch
Para criar um novo branch e mudar para ele automaticamente usa-se
git checkout -b novo-branch
Para manter os branches atualizados, git pull e git push devem ser suficientes. O Git mantém cada branch separado sem interferir no outro. Contudo, mudanças sem commit vão aparecer em todos os branches.
Para mesclar as mudanças do branch master no seu branch é só fazer:
git pull .
Git Cherry-pick
Você pode aplicar um commit específico na sua árvore com cherry-pick. No exemplo abaixo estamos no branch master e o commit 85cd08ee1aec0fbd3cf3d696a70872639e59212f aconteceu no branch novo-ramo. Ele vai aplicar apenas esse commit em master.
git cherry-pick 85cd08ee1aec0fbd3cf3d696a70872639e59212f
Isso é útil quando você corrigiu um bug em um ramo de desenvolvimento e quer replica-lo no ramo principal.
Resolvendo conflitos
Quando um merge não é resolvido automaticamente pelo git ele indica isso claramente. Você não vai conseguir dar um commit. Tanto commit quanto status vão mostrar os arquivos que precisam resolver os conflitos:
Git vai marcar os conflitos no arquivo usando marcadores de conflito. Abaixo podemos ver um conflito marcado com duas versões:
<<<<<<< variant A
Uma versão
>>>>>>> variant B
Outra versão
======= end
Tudo que você precisa fazer é editar o arquivo para resolver os conflitos e dar um commit com:
Git Stash
Ferramenta que no momento é nova pra mim, mas que já me ajudou muito, imagina vc ter que estilizar uma pégina e ela está cheia de erros e um programador ainda precisa trabalhar na mesma, mas vc já começou o seu precioso CSS, o que fazer? Hum, vc pode continuar + eu prefiri fazer um git stash, ou seja, fazendo essa ação guardo tudo que eu fiz em um branch "anônimo", e então todo conteúdo vivo do seu repositório local é salvo em .git/refs/stash e o repositório é resetado para o HEAD, retornando ao estado limpo, antes de se fazer qualquer alteração, Understand? (:
No exemplo abaixo faço uma pequena demonstração, utilizando:
git stash
Para listar stashs existentes:
git stash list
Ok, ok, mas e agora wylkon? Você me ensinou a sumir com meu conteúdo, a listá-los, mas como faço pra ele aparecer de novo? Um magico nunca ensina seus segredos, mas isso não é mágica! Basta executar:
git stash apply
Para apagar todos os Stashs basta excultar:
git stash drop
Removendo um stash específico, passando o índice do mesmo:
git stash drop stash@{1}
Fontes de Consulta
- http://genos.mus.br/handbook/node15.html
- http://eustaquiorangel.com/posts/529
- http://www.akitaonrails.com/2008/10/2/entendendo-git-e-instalando-gitorious-git-via-web
- http://lsdr.net/blog/2008/09/26/git-stash/
- http://pt-br.gitready.com/iniciante/2009/01/10/stashing-your-changes.html
- http://lmgtfy.com/?q=Git
Agradecimentos
Agradeço a grande equipe da Dburns Design (Marcio Trindade, Shadow, Philipe Casarotte e o novo membro "BIN") e a Bruno Azisaka Maciel (dookie) por ter me dado a oportunidade de aprender e agora ensinar... ou pelo menos tentar... grato!
Duvidas? Acha que pode Ajudar a melhorar esse post? Comenta ae!
Configurações GIT - Tutorial
February 25th, 2009
Depois de Séculos... eis o novo site e os novos posts.
Muita gente me perguntou sobre as configurações do GIT (eu me perguntei também,hehehehe), então vou postar algumas configurações básicas e que são muito usadas.
Iniciando
git config --global user.name "Seunome"git config --global user.email seunome@dominio.com
# colors
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.interactive auto
# shortcuts
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
No Trabalho
git clone repositóriogit branch nomedobrach
git checkout nomedobrach
git add . (add todos os arquivos pendentes)
git commit -am "Comentario do commit"
git merge nomedobranch
git push
Branch
git checkout -b ou git co -b nomedonovobranchgit branch
git branch -D nomedobranch (apaga o branch selecionado)
Merge
git-merge (para fazer uma comparação entre os branch's e unir suas diferenças.)git-rebase (copia o branch selecionado)
Suas Alterações
git status ou git stBem espero que ajude (: da mesma forma que me ajudou e me ajuda!
Comentem... duvidas? grite!
Finalmente site novo...
February 24th, 2009
Eu sei... demorei para postar novas coisas. mas agora voltei a ativa!
Novos posts a partir de amanhã!
valeu pela ajuda!
December 8th, 2008
Estrutura de um link em Cake
Jquery!
December 7th, 2008
Qual Editor de Códigos Usar?
November 26th, 2008
Bem, quando comecei minha caminhada aos códigos (e ainda não chegou ao fim), me perguntei: que programa vou usar? Logo percebi que podia fazer tudo pelo simples bloco de notas que vem em todos os computadores, indiferente do sistema operacional. Posso dizer que o bloco de notas(Windows) não oferece grandes ferramentas de edição de códigos, ao contrario do gedit(Linux/ Gnome) que se pode add vários plugins que facilitam nossa vida, ou seja, se você usa Windows e quer aprender, comece com o bloco de notas, de uso simples, ai com o tempo procure um "text editor" que se encaixe no seu estilo de código.
Indicações: gedit(Linux), NetBeans(Windows/Linux), e-text editor(Windows), Notepad ++(Windows - Indicado por "Philipe Casarotte"). :)