# Git Básico
## Introdução

Git é um sistema de controle de versão livre e open source,distribuído sob os termos da versão 2 da GNU General Public License, inicialmente projetado e desenvolvido por Linus Torvalds para o desenvolvimento do kernel Linux, mas atualmente muito utilizado, por sua eficiência, rapidez e maturidade, em projetos de pequeno e grande porte. Sua manutenção é atualmente supervisionada por Junio Hamano. A facilidade de realizar um versionamento de projeto através desta ferramenta é um dos principais fatores para a sua grande utilização no mercado e, até mesmo, nas universidades de tecnologia, principalmente. Sendo assim, abaixo será encontrado o modo de instalação e configuração do git e os comandos básicos de funcionamento desta incrível ferramenta.

## Instalando

Para começar a utilizar o git é necessário, primeiramente, instalá-lo no computador. Existem diferentes maneiras para a instalação, as mais fáceis, para cada sistema operacional, estão demonstradas abaixo.

### Instalação no Linux

Neste tutorial quando não vier ilustração ou anúncio em contrário, sempre estaremos falando de comandos de instalação via terminal, ou seja, interface não-gráfica baseada em comandos (CLI - Command-Line Interface), no shell Unix padrão da distribuição, via de regra o Bash.
Na maior parte das distribuições, incluindo Ubuntu, o sistema já vem munido de git, basta conferir se está lá e se está atualizado com git --version.
Se não é a versão que você esperava (necessita de versão mais moderna), no Ubuntu e Debian pode instalar via PPA. Se por acaso não tinha *git* instalado no seu sistema (alguns servidores são "pelados" e requerem instalação a parte), numa distribuição baseada no Debian, como Ubuntu, Mint e Elementary, pode-se instalar com *apt*:

### Variações não-basicas

Neste guia, que é apenas um guia básico orientado às opções mais populares, não estamos dando dicas sobre outras distribuições (menos populares ou com suporte privativo como Apple). No caso de Fedora por exemplo o comando seria
Também não faremos nenhuma outra recomendação adicional sobre large files ou versões mais modernas do git. Fica apenas o aviso para os iniciantes não se assustarem com avisos de "need LFS" ou "updated version". Para o caso de versão mais atualizada, confira no git-scm.com/download/linux qual o PPA recomendado, a página vai sugerir algo como ppa:git-core
Como iniciante prefira sempre o mais estável e as opções default, recorrendo a variações apenas se for realmente necessário.

### Instalação no Windows

No Windows, os mais simples são o desktop.github.com e o Git Bash. Ambos permitem escrita dos comandos através de um prompt. Ver mais detalhes em Git Básico/GitHubDesktop.

### Instalação no Mac

Quando se está utilizando um Mac é exigido usar o instalador gráfico do Git, disponível na página do SourceForge: http://sourceforge.net/projects/git-osx-installer/.

## Configurando

Após a instalação, algumas configurações devem ser realizadas para o correto funcionamento do git. Primeiramente, uma identificação do usuário é primordial. Para isso, basta digitar: (usando $NomeDaVariável para os prenchimentos livres/placeholders e comentando ao lado com # comentário)
Exemplo:
Outras configurações podem ser realizadas, mas são opcionais. Caso estas não sejam feitas, o git usará o padrão. Dentre as diversas existentes, pode-se citar:
* Configuração de editor:
* Configuração de diff:
* Configuração de cor:
Há também a possibilidade de verificar as configurações do git através do seguinte comando:

## Comandos Básicos

A seguir o passo-a-passo do Try-Git.
O "básico do básico" depende do contexto, o usual para operações diretas no master é:
* Clone: traz o repositório para a sua máquina. git clone
* Pull: sincroniza o seu repositório local com o online, trazendo atualizações. git pull
* Push: depois de alterações locais, permite enviar online. git add . seguido de git commit -m "comentário" e git push
Para trabalho mais sério ou em grandes equipes, é importante também criar um branch para o seu trabalho local, modo que o pull e push serão relativos ao branch... Requer um pouco mais de sofisticação do usuário git, mas está tudo descrito a seguir entre os comandos básicos.

### Inicialização

A primeira coisa a se fazer quando se deseja versionar um projeto através do git é iniciar um repositório. Para isso, vá até a pasta do projeto e dê apenas $ git init, caso não haja nada na pasta. Quando a pasta já possui arquivos existentes deve-se, então entrar na pasta e:
Exemplo:

### Clonar projeto

Quando se inicia o projeto no próprio GitHub, por exemplo, ou se é um colaborador, para que o repositório seja local também, se faz necessária a clonagem do projeto no computador. O comando $ git clone <url_do_projeto> é usado para este fim.

### Verificação do status

Sempre que desejar verificar o status do repositório basta rodar $ git status. Caso tenha adicionado, modificado e/ou deletado arquivos, aparecerão os caminhos (dentro da pasta) dos mesmos. Caso nada tenha sido feito, aparecerá a frase "On branch <nome_da_branch>. Your branch is up-to-date with origin/<nome_da_branch>. Nothing to commit, working directory clean".
Exemplo:

### Adição de arquivos novos e/ou modificados

Todas as alterações e adições de arquivos devem ser adicionadas ao git. Há duas maneiras de realizar esta ação: $ git add . ou $ git add <caminho_do_arquivo>. Na primeira, o ponto indica que se deseja adicionar tudo; e na segunda, adiciona-se uma modificação/adição por vez. Apesar de parecer ser uma maneira muito simples e rápida, utilizar $ git add . não é aconselhável, visto que arquivos pessoais, de configuração, de banco de dados e outros indesejáveis podem ser adicionados sem querer.

### Remoção de arquivos

Assim como todas as modificações devem ser adicionadas ao git, o mesmo deve acontecer para as deleções. Porém, diferentemente da adição, não há uma maneira de deletar todos os arquivos de uma única vez, os mesmo devem ser deletados um a um através do comando $ git rm <caminho_do_arquivo>.

### Desfazer modificações

Algumas vezes, sem querer, modifica-se arquivos que acabam não dando certo ou "quebrando" o sistema. A primeira coisa a se fazer é, obviamente, tentar resolver o problema, porém, como uma última opção, pode-se desfazer os arquivos modificados com $ git checkout -- <caminho_do_arquivo>.

### Commits

Após adicionar e/ou remover os arquivos, deve-se armazenar as mudanças, ou seja, realizar um commit das mesmas. Há diferentes variações do comando. Para commitar, abrindo o editor:
Neste caso, deve-se escrever uma mensagem, de preferência com uma breve descrição da alteração e onde ela foi realizada, salvar e sair. Para commits com mais de um participante é aconselhável:
O "-s" abre no editor o "Signed-off-by: nome_do_usuario <email_do_usuario>", usado para identificar os participantes do commit. Para commitar já escrevendo a mensagem, sem abrir o editor:
Também é possível commitar como outro autor, ou seja, usuário diferente do que está configurado no computador. Observação: o "-m "Mensagem do commit"" também pode ser usado neste caso, logo após o comando:
Caso algo de errado tenha acontecido no commit anterior, como por exemplo, uma mensagem incompleta, o problema é extremamente fácil de resolver:
Exemplo:

### Histórico de commits

Quando se deseja verificar os commits feitos anteriormente, com seu código, data e hora, autor e mensagem, basta escrever $ git log.
Exemplo:

### Remote

Para que seja criado um repositório remoto no GitHub, por exemplo, é necessário que se adicione os arquivos locais neste repositório. Para isso, digite $ git remote add origin https://github.com/<nome_do_usuario ou nome_da_organização>/ <nome_do_repositório>.git.

### Ramos de Trabalho (Branches)

Uma das funcionalidades mais úteis do git é sua possibilidade de criar diferentes ramos (branches) de trabalho. Assim, vários colaboradores conseguem modificar diferentes arquivos com risco mínimo de dar conflitos. Todo repositório já possui, por default, uma branch chamada master. Para criar novas branches, digite $ git checkout -b <nome_da_branch>, e para verificar as branches existentes e em qual encontra-se $ git branch. Para mudar de uma branch para outra: $ git checkout <nome_da_branch>. Depois de realizado um rebase e um merge (encontrados na aula de git avançado) a branch torna-se inútil. Sendo assim, pode-se mudar de branch e excluí-la com $ git branch -d <nome_da_branch>.
Exemplo:

### Push

Com todas as modificações adicionadas, commitadas e na branch correta, é necessário que essas mudanças sejam adicionadas, também, ao repositório remoto. Digite git push origin $nome_da_branch e isso ocorrerá.
Usar a flag --force faz com que o repositório remoto fique igual ao seu repositório local, deletando quaisquer alterações feitas antes do seu último pull. É recomendável que se utilize o comando $git push <remote> --force ou $git push -f apenas quando se tem certeza do que está sendo feito.

### Pull

Considerando que vários colaboradores estejam participando do projeto, cada um em sua branch, sempre haverá alterações nos arquivos. A fim de manter o seu projeto atualizado é necessário ter essas mudanças no seu repositório local, além do remoto. Para isso, existem duas variações do comando pull. Quando se deseja atualizar todo o projeto, dá-se: $ git pull e quando atualizar uma branch específica já satisfaz a necessidade, digita-se: $ git pull origin <nome_da_branch>.

### Diferenças entre commits

Sempre que achar necessário diferenciar commits basta digitar $ git diff. Por exemplo, quando deseja-se comparar o arquivo atual com o do commit mais recente: $ git diff HEAD.
Exemplo: