aplicacoes, linux

Git no Ubuntu

Preparando o ambiente:

sudo apt-get install git-core
sudo apt-get install gitk
sudo apt-get install ssh
sudo apt-get install meld

Verificar versão corrente do Git:

git --version

Criando um par de chaves SSH:

ssh-keygen -t rsa

[dê Enters para todas as perguntas]

Será gerado um par de chaves na pasta /home/$USER/.ssh
A pública será copiada para um servidor remoto (em ~/.ssh/authorized_keys).
A privada deve ser mantida em sigilo.

Ferramenta externa para Diff e Merge:

Criar em /usr/local/bin os arquivos….

extDiff, contendo:

#!/bin/sh
[ $# -eq 7 ] && meld "$2" "$5"

e extMerge, contendo:

#!/bin/sh
meld $*

Dê permissão de execução para ambos os arquivos.

Toda vez que um git diff for executado, a ferramenta gráfica meld será chamada ao invés do terminal exibir diversos trechos dos N arquivos alterados localmente (com diversas linhas sendo impressas 2 vezes com cores diferentes). Meld vai dividir a tela com as 2 versões do arquivo: original e alterada, apresentando marcadores que ajudarão a enxergar todas as mudanças nos arquivos. Após fechar o meld para a analise do arquivo corrente, ele será automaticamente re-aberto para a analise do próximo arquivo.

Após a execução de um git pull, é possível que seja informado que houve um conflito entre a versão do servidor e a da sua máquina, e que a sua precisa ser manualmente revista antes de se fazer o git push. Chamando git mergetool, o meld será executado dividindo a tela em 3 versões do arquivo: a do servidor, a sua e a que será mergeada. A partir das 2 versões, basta “montar” a versão mergeada. Ao terminar, salve o trabalho e saia do meld. Pronto: já é possível fazer um git push. Talvez seja necessário deletar manualmente alguns arquivos intermediários gerados (backups do estado pré-merge).

Configurações iniciais de usuário:

git config --global user.name "MEU_LOGIN"
git config --global user.email MEU_EMAIL
git config --global diff.external extDiff
git config --global merge.tool extMerge
git config --global mergetool.extMerge.cmd 'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
git config --global mergetool.trustExitCode false
git config --global color.ui true

Verificar as configurações:

git config --list

O Git trabalha com 4 áreas de trabalho:
1. Repositório: É o arquivo .git localizado na raíz do projeto, criado pelo comando git init.
2. Working Directory: São todos os arquivos do diretório, exceto .git, representando uma “foto” do projeto.
3. Index (ou Stage): É um buffer onde serão indexadas as modificações a serem enviadas para o Repositório ou para o Stash
4. Stash: É um sistema de armazenamentos temporários gerenciado pelo Git.

Dúvidas:

git help

Iniciar um novo repositório local, a partir do diretório corrente:
Também é possível criar um repositório sem Working Directory (num servidor remoto que nunca fará commits, apenas os receberá).

git init
git init --bare

Copiar um repositório local ou remoto, trazendo apenas o branch master remoto:

git clone PATH/.git

Verificar qual é o repositório do qual eu clonei o meu (quem é meu origin):

git remote -v
git remote show origin

Fazer com que um repositório clonado também seja origin do meu repositório gerando uma via de mão dupla:

git remote add origin PATH/.git

Remover a associação de um repositório com seu origin:

git remote rm origin

Mostrar o branch no qual você está, quais arquivos estão no índice e quais não estão.

git status

Adicionar 1, N ou todos os arquivos descritos em git status como “untracked” para dentro do índice.

git add ARQUIVO_1
git add ARQUIVO_1 ARQUIVO_2 ARQUIVO_3
git add .

Adicionar arquivos de forma interativa:

git add -i

Retirar do controle de versão 1 ou N arquivos.
Os arquivos continuarão no sistema de arquivos e voltarão a ser listados pelo git status como “untrackeds”.

git rm --cached ARQUIVO_1
git rm --cached ARQUIVO_1 ARQUIVO_2

Cancelar a adição de 1, N ou todos os arquivos do índice.

git reset HEAD ARQUIVO_1
git reset HEAD ARQUIVO_1 ARQUIVO_2
git reset HEAD

Apagar todos os arquivos untracked da Working Area:

git clean -f

Desfazer alterações de 1 ou N arquivos, restaurando seus estados de acordo com o repositório.

git checkout -- ARQUIVO_1
git checkout -- ARQUIVO_1 ARQUIVO_2

Salvar no repositório as alterações incorporadas no índice.
Além de copiar as mudanças no projeto para dentro do repositório, todos os arquivos adicionados ao índice serão retirados pois eles já terão sido versionados.

git commit -m "MENSAGEM EXPLICANDO QUE MUDANÇAS FORAM REALIZADAS"

Adicionar modificações no índice e salvar no repositório em um único comando.
Atenção: esta opção não adiciona ao índice arquivos não versionados: apenas os modificados.
Evite usar esta opção.

git commit -a -m "MENSAGEM EXPLICANDO QUE MUDANÇAS FORAM REALIZADAS"

Adicionar conteúdo ao último commit realizado.
A nova mensagem informada irá substituir a mensagem anterior.
Não use este recurso após ter feito um push.
Isso é um tipo de operação destrutiva, pois “substitui” o commit anterior

git commit -m "MENSAGEM EXPLICANDO QUE MUDANÇAS FORAM REALIZADAS" --amend

Exibe modificações nos arquivos não adicionados na stage area ou os já adicionados.

git diff
git diff --staged

Verifica histórico, estatísticas e outras informações dos commits realizados.

git log --stat

O arquivo .gitignore diz para o git que tipos de arquivos não devem ser considerados tanto para criação quanto para modificação.
Ainda assim, é possível adicioná-los ao índice através do comando add com opção -f:

git add ARQUIVO_1 -f

Cancelar 1, 2 ou mais commits.
Esta operação faz com que os arquivos voltem ao índice (ainda modificados), mas desfaz o commit.

git reset HEAD~1 --soft
git reset HEAD~2 --soft

Eliminar 1, 2 ou mais commits.
Isso é um tipo de operação destrutiva, pois “apaga” commits anteriores, e desfaz todas as mudanças nos arquivos.

git reset HEAD~1 --hard
git reset HEAD~2 --hard

Rever os commits destruídos pelo amend e pelos reset HEAD~N –hard.
Veja que os hashs destes commits serão apresentados, para que possam ser recuperados.

git reflog

Recuperar commits destruídos:

git merge HASH

Esconder mudanças automaticamente ou com alguma “identificação”.
Faça alterações no working area, copie essas alterações para o índice e depois esconda-as pra poder se focar em outro serviço.

git stash
git stash save "ALGUMA IDENTIFICAÇÃO"

Listar mudanças escondidas.

git stash list

Recuperar mudanças escondidas de volta para o índice.
Sem parâmetros, o comando irá recuperar a última mudança adicionada na pilha e copiá-la para o índice.
É possível informar qual mudança deseja-se recuperar através da identificação obtida pelo comando git stash list.

git stash apply
git stash apply stash@{0}
git stash apply stash@{1}
git stash apply stash@{2}

Deletar uma das mudanças escondidas.
Sem parâmetros, o comando irá deletar a última mudança adicionada na pilha.
É possível informar qual mudança deseja-se deletar através da identificação obtida pelo comando git stash list.

git stash drop
git stash drop stash@{0}
git stash drop stash@{1}
git stash drop stash@{2}

Remover todas as mudanças escondidas.

git stash clear

Remover a última mudança escondida, e copiá-la para o índice.

git stash pop

Lista branches e mostra qual é o corrente.
Também é possível adicionar na listagem os branches de origin.

git branch
git branch -a

Criar um novo branch e passar a usá-lo.
Também é possível criar um branch a partir de outro branch remoto, ou do hash descrito no log.

git checkout -b NOME_DO_BRANCH
git checkout -b NOME_DO_BRANCH origin/NOME_DO_BRANCH_REMOTO
git checkout -b NOME_DO_BRANCH SHA1

Passar a trabalhar em outro branch.

git checkout NOME_DO_BRANCH

Deletar um branch remoto

git push origin --delete NOME_DO_BRANCH

Exibir o histórico de commits.

gitk --all &

Merge do branch corrente com outro, desde que o outro seja uma evolução do corrente.

git merge OUTRO_BRANCH

Merge do branch corrente com outro, sendo que os branches evoluíram de formas diferentes, mas têm um início em comum.

git rebase OUTRO_BRANCH

Remover um branch.
Se o branch deletado não tiver sido mergeado completamente no master e ainda assim desejarmos removê-lo, use -D.

git branch -d OUTRO_BRANCH_MERGEADO
git branch -D OUTRO_BRANCH_NAO_MERGEADO

Agrupar diversos commits de um branch num único na hora de copiá-los para outro branch.
As mudanças dos N commits de OUTRO_BRANCH vão para o índice do branch corrente, para então ser realizado um único commit.

git merge OUTRO_BRANCH --squash

Empurrar os commits do meu repositório para o repositório origin.
Também é possível empurrar commits para um branch específico de origin.

git push
git push origin NOME_DO_BRANCH

Puxar os commits do repositório origin para o meu repositório.
Também é possível puxar commits de um branch específico de origin.

git pull
git pull origin NOME_DO_BRANCH

Criar uma tag a partir do ponto atual do branch.
Depois é possível enviar esta tag para origin e mais tarde criar um branch a partir desta tag.

git tag VERSAO
git push --tags
git checkout -b MEU_BRANCH VERSAO

Voltar o branch para um checkout anterior

git checkout NOME_DO_BRANCH
git reset --hard 001100110011
git push --force origin NOME_DO_BRANCH

Referência:

http://vimeo.com/43683141
http://www.vogella.com/articles/Git/article.html
http://git-scm.com/book/pt-br/Customizando-o-Git-Configura%C3%A7%C3%A3o-do-Git
http://try.github.io/levels/1/challenges/15

http://stackoverflow.com/questions/17667023/git-how-to-reset-origin-master-to-a-commit

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s