- GIT
- Repositório distribuído: o git não trabalha com um servidor centralizado de repositório, como o SVN. Sempre que um usuário clona um repositório ele baixa todo o conteúdo (claro!) juntamente com todo o histórico de commits já feitos.
- Instalação em Ubuntu
- sudo aptitude install git
- Instalador do Windows
- Instalação em Mac
- sudo brew install git
- GIT com repositório local
- Inicialização do repositórioc e criação de novos arquivos
- git init .
- git status
- echo "arquivo readme" > readme # echo: simplesmente manda pra tela o parâmetro que recebeu. No caso, a saída está sendo redirecionada para um arquivo também chamado readme (O > serve para salvar a saída em tela de um comando qualquer em arquivo. Isto é, o que fica depois do > é o arquivo que é usado como saída do comando que está antes do >).
- git status
- git add . # o que estiver depois do # o interpretador de comandos ignora (pelo menos no linux, no windows eu acho que substituindo por ;REM funciona)
- git commit -m "criação do readme"
- Configuração de ferramentas gráficas
- git config --global diff.tool
# diff - git config --global merge.tool
# merge - # (recomendo o meld como ferramenta de diff/merge)
- Modificando arquivo e visualizando as diferenças
- echo "Arquivo readme" > readme
- git status
- git diff
- git difftool # Esta linha e a anterior são duas forma diferentes de se fazer a mesma coisa, só pra constar
- git add readme
- git status
- git commit -m "Melhoria no readme"
- Excluindo arquivos
- rm readme # equivalente windows: del readme
- git status
- git rm readme
- git status
- git commit -m "Exclusão do arquivo readme"
- Descartando alterações não commitadas
- echo "arquivo leiame" > leiame
- git add leiame
- git commit -m "Criação do leiame"
- echo "Alteração indesejada\!" >> leiame # Não sei se o >> funciona no win, a idéia é concatenar conteúdo ao final do arquivo
- git status
- cat leiame # win: more leiame
- git checkout leiame
- # Observação: o Eclipse não enxerga automaticamente mudanças feitas por ferramentas externas, então é preciso ir no Eclipse e dar um F5 no projeto que foi modificado
- cat leiame
- git status
- Adicionando pastas inteiras ao controle de versão
- mkdir pasta # win: md (eu acho, mas isso só cria uma pasta)
- echo file1 > pasta/file1 # win: trocar / por \
- echo file2 > pasta/file2
- git status # Notar que neste ponto não são mostrados os arquivos da pasta criada
- git add .
- git status # Agora o git já olhou dentro da pasta e já sabe quais são os arquivos que ele precisa adicionar
- git commit -m "Nova pasta"
- git status
- Pastas vazias
- mkdir emptyfolder
- ls -l # win: dir (sem o -l no windows)
- git add . # Ignora a pasta pois está vazia
- git status # Diz que não há nada a commitar, um git commit depois disso não iria funcionar
- rmdir emptyfolder # win: rd emptyfolder
- # Isto é: o git não versiona pastas vazias
- Excluindo pastas inteiras
- rm -rv pasta # win: del, já falei!
- ls -l
- Criando novas branches e navegando entre elas (localmente)
- git branch # lista as branchs existentes, a que tem o * é a branch ativa
- git branch branch1 # Cria uma nova branch chamada branch1
- git checkout branch1 # Muda a branch ativa
- git branch
- ls -l # Vamos ver que branch1 foi criada com base no que tinha na master, mas poderia ter sido criada com base em qualquer branch
- echo "Ideia maluca" > ideia_maluca
- echo "leiame versão branch1" >> leiame
- git add .
- git commit -m "Ideia maluca"
- ls -l
- cat leiame
- cat ideia_maluca
- git checkout master
- ls -l
- cat leiame
- git branch -D branch1 # Notar que o -D força a exclusão da branch, enquanto o parâmetro -d é menos agressivo, nesse caso o -d não permitiria excluir pois as alterações feitas na branch1 serão perdidas, como é isso o que eu quero, usei o -D
- Merge entre branches (localmente)
- git branch branch1
- git checkout branch1
- echo "Ideia maluca" > ideia_maluca
- echo "leiame versão branch1" >> leiame
- git add .
- git commit -m "Ideia maluca"
- #ok, criamos uma branch que está mais atualizada que a master, agora vamos colocar tudo no lugar
- git checkout master
- git merge branch1
- ls -l
- cat leiame
- cat ideia_maluca
- Merge entre branches (locais) com conflito
- echo "versão branch master" >> leiame
- git add .
- git commit -m "Alteração no readme"
- git checkout branch1
- echo "versão branch1" >> leiame
- git add .
- git commit -m "Alteração no readme"
- git checkout master
- # Nesse ponto o leiame tem uma versão na master e outra na branch1
- git mergetool leiame # *1
- git status
- ls -l
- cat leiame
- # *1 Uma opção bem útil é fazer o merge com a opção --no-commit. Esta opção apenas faz o merge, mas não commita nada, permitindo resolver o merge manualmente (e mais facilmente). Ainda é possível usar ferramenta gráfica de merge dessa maneira.
- Merge com conflito de pastas (localmente, passo opcional, é uma situação menos frequente)
- Visualizando o histórico de commits: git log
- git log --graph --name-only --all --decorate
- Mostra o log bem formatado, o git log tem inúmeras opções
- Voltando o repositório para commits antigos
- O "git checkout" pode receber os seguintes parâmetros: branchs, tags ou hashs de commit. O hash de commit é aquela sequencia enorme de numeros que aparece no log.
- Visualizando a árvore de branches e o histórico de commits: gitk
sexta-feira, 1 de junho de 2012
Git do zero
Assinar:
Postagens (Atom)