Git
De Feliwiki
Git para preguiçosos
- Guia prático do Git. Autor: micaroni@gmail.com (fml.eti.br). Licença: CC-by.
- Veja também esta página semelhantes (em inglês): Git for the lazy
O Git é um sistema de controle de versões.
Como instalar o Git
No Windows
Baixe e instale a versão mais recente em:
Outros sistemas
Dê uma olhada em:
Conceitos básicos
Veja o artigo sistema de controle de versões da Wikipédia para ter uma noção sobre esse tipo de sistema. O conceito do Git é um pouco diferente do CVS e SVN, pois é um sistema distribuído e com muito mais recursos de controle do histórico e de braços de desenvolvimento. Toda cópia local contém todo o histórico de desenvolvimento e os commits são feitos localmente. Somente com o comando push é que as alterações são enviadas para o repositório de origem.
- Nota: Veja também http://git.or.cz/gitwiki/GitSvnComparsion para ter uma idéia melhor das vantagens e desvantagens do Git sobre o SVN.
Primeira vez
Configurar o nome do usuário (importante!):
$ git config --global user.name "Your Name Comes Here"$ git config --global user.email you@yourdomain.example.com
Colocar cores:
$ git config --global color.diff auto$ git config --global color.status auto$ git config --global color.branch auto
Como baixar um repositório remoto
$ cd ~/wa-git- (veja working area para entender o que significa o diretório
wa-gitmencionado acima.)
- (veja working area para entender o que significa o diretório
$ git clone <URL do repositório>
Exemplo:
$ git clone ssh://felipe@fml.eti.br/var/git/util
Como criar um novo repositório local
$ cd ~/wa-git$ cd <diretório-do-seu-projeto>$ git init$ git add .
Como adicionar novos arquivos ao controle de versão
$ git add <nome-do-arquivo>— mas tenha cuidado para não enviar arquivos indesejados.
$ git add .— adiciona todos os arquivos do diretório atual para baixo recursivamente.
Como receber alterações
$ git pull
Para receber alterações em um braço específico
$ git checkout <braco-local>$ git pull origin <braco-remoto>
Como enviar alterações
$ git commit -a— faz umcommitlocal de todos os arquivos modificados.
E uma destas opções:
$ git push— envia alterações do braço local para o remoto equivalente (e.g.master -> orign/master).$ git push --all— envia alterações de todos os braços.$ git push <remote-branch> <source-branch>— envia alterações de um braço local para outro remoto
Trabalhando com braços e tags
Para criar tag
Para criar braço
Para criar um braço e já dar checkout para ele:
$ git checkout -b <nome-novo-braço>
ou
$ git branch <nome-novo-braço>(porém ele não dá checkout para o novo braço)
e para enviar ao servidor:
$ git push origin <nome-novo-braço>— para enviar apenas um braço
ou
$ git push --all— envia todos os braços locais para o repositório de origem
Para listar braços
$ git branch(lista somente os locais)$ git branch -a(lista todos)$ git branch -r(lista somente os remotos)
Para alternar para um braço, tag ou versão
$ git checkout [-f] <braço, tag ou versão>— a opção-ffaz com que arquivos modificados localmente sejam perdidos.
Caso o braço que você alterne não seja "local", ou seja, caso seja uma versão no histórico, uma tag ou mesmo um braço remoto (no estilo origin/<nome-do-braço>) você deve fazer um "checkout -b <nome-do-braço>" em seguida para criar um braço local.
Para remover um braço
$ git branch -d <nome do braço>
Para remover um braço remoto
$ git branch -d -r origin/<name-of-branch>$ git push origin :<name-of-branch>(obs.: sem o origin)
Para mesclar
$ git checkout <nome do braço destino>(você deve "estar" no braço de destino)$ git merge <nome do braço origem> [--no-ff](a opção --no-ff serve para não permitir o fast foward)
Desfazendo
Desfazendo um commit específico e manter o histórico
$ git revert <versao>
- <versao> pode ser um intervalo como por exemplo: 0b7cd284..642e314
- <versao> também pode ser HEAD para desfazer o último commit
- não use este comando quando houver alterações locais!
Reverter apenas alguns arquivos ou path
$git checkout <versao> -- <path>
Onde <versao> é o número da versão correta do arquivo.
Desfazendo arquivo adicionado no git por engano
$ git rm --cached <file>(funciona antes e depois do commit, recomendado!)
ou
$ git reset HEAD <file>(apenas antes do commit)
Desfazendo alterações locais
- Para todos os arquivos
$ git reset --hard HEAD
- Apenas para alguns arquivos
$ git checkout <path>
Outros comandos úteis
Adicionar arquivos ao ignore list
$ echo "padrao*" >> .gitignore
Para verificar se todos os arquivos indesejados já estão no ignore list use o comando:
$ git status
Até que a mensagem "nothing to commit (working directory clean)" apareça. Depois de fazer isso, você pode enviar o próprio arquivo .gitignore ao repositório:
$ git add .gitignore$ git commit
Verificar quantas versões desde o início (versão estilo SVN)
O seguinte comando conta quantos commits foram dados desde a primeira versão:
$ git log --pretty=oneline --all | wc -l
Mostrar histórico com o nome dos arquivos modificados
$ git log --stat
Como dar pull ou push sem o SSH pedir a senha toda vez
Leia [1].
Verificando a diferença entre a versão atual e o último commit de um determinado arquivo
$ git diff <arquivo>
Verificando as modificações locais
$ git diff [-b](a opção -b ignora os espaços em brancos)
Verificar diferença entre dois braços
$ git diff <braco1>..<braco2> --stat
Como reduzir o uso de espaço em disco
- Tente apenas
$ git gc --aggressive
- Avançado
$ git repack -a -d --window=50 --depth=50 --window-memory=1024m
Mostrar estatísticas básicas sobre alterações
Tente aplicar o parâmetro --stat em diversos comandos, como o git log e git diff por exemplo.
Mostrar informações sobre o repositório remoto
É útil porque ele exibe a URL do repositório caso você tenha esquecido.
$ git remote show origin
Git avançado
Já debulhou o git e está se sentindo limitado? Aprenda a refazer o histórico, a dar commit em apenas uma parte do arquivo, a mesclar diversos braços em um só etc.
- Veja o artigo git avançado.

