O GitHub é um serviço de host para repositórios Git. Até o momento, nós criamos nosso repositório Git localmente, ele está apenas no seu computador, para isso nós teremos que colocar ele num repositório remoto, que no caso, usaremos o GitHub. Existem outros semelhantes como o GitLab, o BitBucket, o Phabricator, o Gogs, etc.
Basicamente, para enviar dados do nosso computador pro GitHub usamos o push
, pra buscar os dados do GitHub usamos o fetch
, e para puxar dados do GitHub pro nosso repositório no computador usamos o pull
.
Entre no seu perfil do GitHub pelo navegador, vá em Repositories e em New para criar um novo repositório remoto. Escolha as configurações como o nome do repositório, se ele será público ou privado (no caso, escolheremos público). Veja se é necessário adicionar outras coisas como adicionar um README, o .gitignore, a licença, etc. Depois disso clique em Create Repository.
PS: Caso você queira configurar o SSH para acesso ao GitHub, vá no seu perfil, em Settings e em SSH and GPG Keys. Podemos usar o Git remoto por SSH e por HTTPS.
https://github.com/nomedousuario/NomeDoProjeto.gitgit@github.com:nomedousuario/NomeDoProjeto.gitPara fazer o upload do seu repositório local pro GitHub, entre na pasta desse repositório e veja com git status o atual estado do repositório. Para fazer o push
(enviar pro GitHub), digite git push https://github.com/nomedousuario/NomeDoProjeto.git master (ou a branch que quer enviar). Só com isso, todos os nossos arquivos serão enviados pro repositório remoto, incluindo os commits e tudo mais o que fizemos localmente.
Na primeira vez ele pode pedir login no GitHub, e no Windows ele abrirá o navegador padrão para você confirmar as credenciais do mesmo. No Linux, ele pedirá o login e senha pelo terminal, aí você vai no seu perfil em Settings, Developer Settings, Personal Access Tokens, Tokens Classic e em Generate New Token Classic, coloque um título e marque as opções desejadas e clique me Generate Token. Ele deve gerar um token parecido com esse: ghp_6Athi0nocpil6tuk14XOsOQlXyPr2NPPzgmD.
Para armazenar o token no seu sistema, digite esses comandos:
git config --global credential.helper cache
Ou, para armazenar permanentemente (no disco):
git config --global credential.helper store
Agora, no nosso repositório, faça uma alteração no HTML, veja o status, adicione e commite o repositório. Até então, as alterações serão locais. Para ele sincronizar com o repositório remoto digite git push https://github.com/nomedousuario/NomeDoProjeto.git master.
Para não ficar copiando e colando o link do repositório toda hora, podemos criar um alias para esse comando, utilizando git remote add origin https://github.com/nomedousuario/Projeto-1.git. Para ver se foi adicionado, digite git remote -v, ele mostrará o repositório para fetch (buscar) e push (enviar). Daí é só usar git push origin master.
PS: Lembrando que onde está origin pode ser qualquer nome, mas geralmente origin é o mais usado.
De uma outra forma, criaremos um segundo repositório remoto no GitHub, da mesma forma do primeiro. Nesse caso criaremos o .gitignore e o README (que é usado como uma documentação do projeto).
Vamos clonar esse repositório para a nossa máquina com git clone https://github.com/nomedousuario/Projeto-1.git. Caso queira outro nome na pasta clonada, podemos colocar git clone https://github.com/nomedousuario/Projeto-1.git NovoNomeDoProjeto.
Podemos só buscar as informações sem alterar o repositório com git fetch https://github.com/nomedousuario/Projeto-1.git master, depois podemos dar um git status para ver se é necessário fazer o pull do repositório remoto (puxar). Para puxar as alterações do projeto para o nosso repositório local, digite git pull https://github.com/nomedousuario/Projeto-1.git master. É recomendado primeiro usar o fetch, depois o pull.
PS: Ao clonar um repositório, ele automaticamente colocará o repositório remoto clonado com o alias origin
. Para ter certeza, digite novamente git remote -v. E os comandos push, fetch e pull podem ter a branch omitida, caso você queira fazer as tarefas na branch que você está atualmente, algo como git push https://github.com/nomedousuario/NomeDoProjeto.git ou git push origin (se você tiver na master ele fará o envio pra master, em uma branch criada ele enviará pra esta criada, etc.).
Pode também ser necessário forçar o fetch e o pull em alguns casos. Para isso, podemos usar comandos como:
git fetch --all
git reset --hard origin/master
Já para o push, podemos usar:
git push origin master --force
Ou, de forma mais segura:
git push origin master --force-with-lease
PS: Pode dar conflitos caso o usuário seja diferente do que estão logados nas credenciais. No Windows, remova as credenciais indo em Painel de Controle, Contas de Usuário, Gerenciador de Credenciais e em Credenciais do Windows. No Linux basta usar o comando git credential-cache exit, ou remover os arquivos/diretórios ~/.git-credentials ou ~/.config/git/credentials.
Como já percebemos, num projeto do Git podemos ter vários desenvolvedores trabalhando, no caso, vamos simular múltiplos devs.
Vamos abrir três terminais, onde um será você, o outro será Fulano e o outro será Sicrano.
Vamos clonar o repositório Projeto-1 do GitHub digitando git clone https://github.com/nomedousuario/Projeto-1.git Projeto-1-Fulano e depois fazer o mesmo com Sicrano.
No caso nós vamos salvar com nomes diferentes por exemplificar no mesmo computador, no entanto, num projeto real, cada um trabalharia num computador diferente e por isso, as pastas poderiam ter o nome original mesmo.
Vamos supor que Fulano começa a alterar o código, como adicionar um estilo CSS. Depois ele verá o status e adicionará, e o commit no caso ele fará com o seu e-mail, assim: git commit -m "Alterando CSS" --author="Fulano <fulano@gmail.com>". Daí para enviar pro GitHub basta digitar git push origin master (lembrando que ao clonar ele automaticamente coloca o repositório no alias origin).
Agora vamos pra Sicrano, supondo que ele iria começar a trabalhar no mesmo projeto. Para ele ver se o projeto teve alterações, digite git fetch origin master e git pull origin master, e ele vai puxar as últimas atualizações feitas no repositório remoto. Daí ele aproveita e faz outras alterações, pode ser no CSS mesmo, e daí ele vê o status, adicionará e commitará com git commit -m "Nova Alteração no CSS" --author="Sicrano <sicrano@gmail.com>". Daí ele também fará o push com git push origin master.
PS: Isso estamos simulando numa mesma branch, mas é recomendado que cada desenvolvedor tenha sua própria branch para trabalhar.
Aí você, como coordenador do projeto, você dará o git fetch origin master e o git pull origin master para ver as alterações que os outros devs fizeram.
Num projeto real, vários desenvolvedores podem estar no mesmo projeto, e aí é toda hora fetch, pull e push, além de ser necessário resolver conflitos, como exemplificado anteriormente.
Como já exemplificamos, não é recomendado fazer tudo na branch principal, e por isso é recomendado criar branches para cada coisa que será manipulada no repositório, e depois fundir elas com a branch principal.
Vamos continuar com dois devs simulados, você e o Sicrano. Vamos supor que o Sicrano vai criar uma nova branch, nós podemos usar o checkout com a opção -b para ele, além de criar, automaticamente ele muda pra mesma branch recém-criada, ficando assim: git checkout -b svg.
Nessa nova branch, vamos colocar algumas imagens. Adicione, commite com o nome do usuário git commit -m "Adicionando Imagens" --author="Sicrano <sicrano@gmail.com>", e depois dê o push, que não será no master, mas nessa branch criada, com git push origin svg.
Aí, no site do GitHub, ele identificará o Pull Request do SVG, aí você e sua equipe vai ver no repositório remoto e na notificação, clique em Compare & Pull Request, aí você poderá colocar uma mensagem e clicará em Create Pull Request, daí ele verificará se há conflitos e, caso não haja, aparecerá a opção Merge Pull Request para fundir a branch do outro usuário com a principal. Você pode ir em Commits e ver as alterações no Commit desse outro usuário, além de mandar mensagem pra ele, caso algo esteja errado ou incompleto.
Sicrano poderá continuar adicionando e commitando nessa branch que ele criou. Vamos fazer mais uma alteração em algo, adicionar e commitar como Sicrano, e fazer o push.
Para fundir, basta clicar em Merge Pull Request, e é recomendado fechar essa branch criada.
Daí, no seu computador, basta dar um fetch e um pull no repositório master pra sua máquina.
Para contribuir com projetos de software livre, podemos fazer um fork de um repositório de outro usuário, que nada mais é do que copiar um repositório pro seu perfil no GitHub.
Para isso, vá no repositório desejado e clique em Fork. Lá você poderá alterar o nome, decidir se só copia a branch principal ou copia todas, etc. Depois clique em Create Fork.
Daí, podemos clonar nosso repositório forkado com git clone https://github.com/nossousuario/NomeDoProjeto.git, fazemos as alterações, daí nós adicionamos, commitamos e damos o push pro seu repositório. Para mandar nossas modificações pro usuário criador original do repositório, clique em Contribute e depois em Open Pull Request, e siga as mesmas instruções ensinadas anteriormente.
Só que dessa forma, não poderemos alterar diretamente o código, mas o dono do repositório original pode aprovar ou recusar suas mudanças, e caso aprove, aí sim ele será fundido pelo próprio dono, e você ficará como contribuidor.
Nós podemos também relatar bugs, sugerir melhorias e outros tipos de comentários em um repositório do GitHub.
Para isso, vá no repositório desejado, em Issues e clique em New Issue, escreva o título e a descrição, e clique em Create.
O comando git diff é utilizado no Git para mostrar as diferenças entre versões de arquivos, seja entre o que está no repositório local e o que está no repositório remoto, ou entre o que você modificou e o que está na última versão confirmada (commit). Ele é muito útil para você inspecionar as mudanças que fez antes de confirmar (commit) ou antes de fazer o push para o repositório remoto.
Aqui estão algumas das formas mais comuns de usar o git diff:
Mostrar diferenças não confirmadas:
git diff
Comparar o estado atual de um arquivo com o último commit:
git diff index.html
Comparar as alterações entre o repositório local e o remoto:
git diff origin/master
Comparar dois commits:
git diff c67f99d e0323fe
É uma ferramenta muito poderosa para entender o que mudou, especialmente quando você está trabalhando com várias mudanças e não quer perder o controle do que foi alterado.
Já o comando git show é usado para exibir informações sobre um commit específico no Git. Ele mostra o conteúdo do commit, incluindo a mensagem, as mudanças feitas e os detalhes do autor. Sintaxe básica:
git show c67f99d
Se você não passar um hash, o Git mostra o commit mais recente.
Você também pode usar opções para personalizar a saída, como:
git show --stat: Mostra um resumo das alterações no código.git show --name-only: Mostra apenas os nomes dos arquivos alterados.