Uma ferramenta de versionamento.
E o que é isso? Um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas.
E no que isso me ajuda? Além de facilitar o versionamento de softwares, pense nas vezes em que você já:
A mais famosa rede social de desenvolvedores.
E por que isso me interessa? O GitHub é uma fonte gigantesca de códigos-fonte das mais diversas linguagens, programas e empresas. Além disso, é uma ferramenta e tanto para desenvolver em equipe, fazer controle de bugs, receber ajuda de outros programadores e ainda divulgar o seu trabalho.
Me dê exemplos.
Cadastre-se em: http://github.com
Mas antes, vamos conhecer alguns termos do Git...
Repositório: diretório do seu projeto;
README: arquivo de descrição do seu projeto;
Licença: arquivo que define as permissões dos usuários no repô;
Fork: fazer uma cópia do repositório de outro para o seu usuário;
Clone: fazer uma cópia do repositório para a sua máquina;
Pull: fazer uma atualização do repositório na sua máquina;
Push: enviar uma atualização do seu repositório;
Commit: "salvar" uma modificação do seu repositório;
Pull request: pedir para o dono do projeto "salvar" uma modificação que você fez no repositório dele.
Faça seu cadastro no GitHub e vamos lá!
# Mac
$ sudo port install git-core +svn +doc
+bash_completion +gitweb
# Linux
$ sudo apt-get install git
Todos os commits utilizam suas informações de identidade para serem armazenados, por isso precisamos informar nome e email.
$ git config --global user.name "Joao Silva"
$ git config --global user.email joaosilva@exemplo.com
Para verificar outras configurações já aplicadas:
$ git config --list
Para saber sobre mais configurações disponíveis e personalizáveis, acesse: https://git-scm.com/book/pt-br/v1/Primeiros-passos-Configura%C3%A7%C3%A3o-Inicial-do-Git
Você pode fazer troca de informações com o GitHub por dois métodos:
No Git Bash ou Terminal:
$ ssh -v
$ ssh-keygen
Adicionando a chave ao GitHub:
De agora em diante, se quiser descobrir mais sobre os comandos do Git, você pode ver outras informações usando:
$ git help <verb>
$ git <verb> --help
Onde <verb> é o local onde deve ser inserido o comando que você deseja pesquisar.
Repositório: é um local onde se acumula e armazena informações e arquivos de dados do seu projeto e do próprio git.
$ git init
Este comando irá criar um novo subdiretório chamado .git, um diretório oculto que contém todas as informações locais do seu projeto no git, incluindo logs, branches, configurações, entre outros.
São ramos do seu repositório que não seguem a timeline normal. Eles existem de forma separada do ramo principal e só são adicionados ao ramo principal quando você realiza um merge.
Para criar um novo branch:
Para acessar um branch:
Para apagar um branch:
Listar branches:
Dentro do branch tudo funcionará normalmente, como se você estivesse no master.
$ git checkout -b <branch>
$ git checkout <branch>
$ git checkout -d <branch>
$ git branch
Cada arquivo no nosso working directory apresenta um de dois status possíveis: tracked ou untacked. Arquivos untracked são aqueles que não estão sendo preparados para o commit, ou seja, não estão no index. Já arquivos tracked são aqueles que estão no index, inclusos no próximo commit.
Arquivos que já foram tracked também podem possuir três status diferentes: unmodified, modified ou staged. Arquivos unmodified continuam da mesma forma que nos commits anteriores, arquivos modified foram editados desde o commit anterior e arquivos staged foram preparados para o próximo commit.
Para adicionar um ou mais arquivos ao index utilizamos o comando git add.
Nem sempre queremos salvar todos os arquivos que temos no projeto no nosso repositório. Por exemplo, arquivos de log são desnecessários pra qualquer parte do projeto a não ser no nosso desenvolvimento local. Por isso, podemos escolher ignorar alguns arquivos e não levá-los para nossas versões no git.
Para isso, basta criar um arquivo .gitignore e colocar em cada linha o arquivo que queremos ignorar, ou até mesmo um diretório ou uma extensão.
O salvamento de uma modificação no nosso repositório do git só ocorre quando nós realizamos um commit. Para realizar um commit precisamos utilizar o comando apropriado e também passar uma mensagem explicando sobre o que se trata este commit:
Caso uma mensagem não seja passada diretamente no comando de commit, o git irá abrir um editor de texto para que escrevamos a mensagem.
Para ver commits anteriores, use o comando git log.
$ git commit -m "Descreva as mudanças deste commit"
Por exemplo, aqueles repositórios disponíveis no GitHub.
Existem várias formas de trabalharmos com um repositório remoto, seja "baixando" um ou simplesmente linkando um repositório local à um na nuvem.
É o ato de copiar um repositório de outra pessoa para o seu usuário, dessa forma você pode trabalhar no mesmo código que aquela pessoa estava trabalhando.
É o ato de copiar um repositório remoto para sua máquina local, como se você fizesse o download dele. O repositório pode ser seu ou de outra pessoa e você poderá, inclusive, modificá-lo, mas será mais difícil enviar suas modificações se não tiver feito um fork.
Caso você tenha criado um repositório local e queira fazer dele um repositório remoto, existem alguns passos a serem seguidos.
$ git remote add origin <remote repository URL>
Obs: Origin e master são nomes escolhidos por convenção, mas você pode mudá-los.
Da tradução literal, push significa empurrar. Ou seja, estamos empurrando nosso projeto local para o repositório remoto.
Quando fazemos um push, o Git verifica automaticamente os arquivos que sofreram modificações, foram adicionados e removidos e realiza todas as mudanças necessárias no repositório remoto. Tudo sozinho!
$ git push origin master
Da tradução literal, pull significa puxar. Ou seja, é o contrário do push e, neste caso, estamos puxando informações do repositório remoto para o local.
Da mesma forma que quando fazemos o push, o Git verifica todas as modificações e atualiza nosso repositório local sozinho.
$ git pull origin master
Chamamos de merge o processo do Git verificar as modificações e atualizar o repositório sozinho. Porém, algumas vezes isso pode gerar um conflito. Isto ocorre pois pode ser que dois usuários tenham feito modificações de uma mesma informação e o Git não soube decidir qual modificação deveria ser aceita, então ele pede para o usuário resolver aquele conflito por ele.
Para resolver um conflito, basta identificarmos onde o conflito se encontra (indicações específicas de HEAD e '>'), apagarmos a parte que queremos substituir e deixar apenas a válida, e realizar um novo commit.
Da mesma forma que o Git realiza um merge das nossas modificações automaticamente, podemos pedir que ele realize um merge de um branch para o outro.
Por exemplo, criamos um branch para adicionar uma nova modificação a um programa, e agora queremos colocar tudo que foi desenvolvido nesse branch no ramo master:
$ git checkout master
$ git merge <branch>