Wylkon Cardoso
 

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.

GIT

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"
Instalação

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\]]\$ '
Configurações

Repositórios do Gitorious

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 branches

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:

CONFLICT

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:

Editando Arquivo Conflitado Arquivo Editado! Pronto!

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

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ório
git 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 nomedonovobranch
git 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 st

Bem 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

Estrutura de um link em Cake

Jquery!

December 7th, 2008

Grande facilidade de utilização e efeitos incríveis, isso você conseguem com ele!

Entre outros...

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"). :)