Tutorial simples: Como usar o git e o github

Ultimamente estou envolvido em vários projetos ao mesmo tempo com várias equipes diferentes, então controle de versão é essencial.

Segue um manualzinho básico para iniciar com o git, espero atualizar e complementar este passo-a-passo com mais exemplos logo.

O git serve para versionamento local, você pode compartilhar de algumas maneiras, a mais fácil é com serviços online. Neste exemplo vou usar o github, testei também o projectlocker, que dá repositórios private grátis,  mas não gostei. Outro que parece legal é o Codaset, ainda não testei.

1) Instalar git

$ sudo apt-get install git-core

É necessário gerar uma chave ssh e fazer um cadastro em algum repositório git. ( Esta etapa não é exatamente sobre o git, mas sobre a segurança dos repositórios. )

Confira se vc já tem alguma chave com um “ls ~/.ssh/”, se já existir uma você pode utilizá-la ou gerar uma nova:

ssh-keygen -t rsa -C "comment"

“comment” é só um lembrete para saber do que se trata a chave, normalmente usa-se o seu nome de usuário do serviço que vai usar, por exemplo o github.

Falando nisso, está na hora de criar um usuário lá (http://github.com), vai lá que eu espero…

Depois de logado vá para https://github.com/account e clique em “SSH Public Keys” e “add another public key”. A cópia da chave precisa ser exata(eu ia escrever que ‘precisa ser precisa’ mas é feio né), então pode-se fazer assim:

sudo apt-get install xclip
cat ~/.ssh/id_rsa.pub | xclip -sel clip

Aí é só colar com um Ctrl+V normal. Agora já dá para se comunicar com o github:

ssh git@github.com

Vai aparecer “ERROR: Hi codexico! You’ve successfully authenticated, but GitHub does not provide shell access”, não se assuste com o ERROR, o que interessa é que o github te reconheceu. Qualquer duvida tem o help do github: Generating SSH keys (Linux).

Por padrão o git vai pegar o usuário do sistema, para que seu nome de usuário do github apareça corretamente use os comandos:

git config --global user.name "Your Name"
git config --global user.email codexico@gmail.com

2) Criar Projeto no github

1) Podemos criar um novo projeto ou usar um existente. Para criar um novo vá até o github e no alto da página clique em “Dashboard” e depois em “New Repository”.

Crie um espaço para o projeto no comnputador:

$ mkdir nomedoprojeto
$ cd nomedodiretorio

2) Iniciar um git neste diretório:

$ git init

Saída do comando:

Initialized empty Git repository in /nomedodiretorio/.git/

Deve aparecer um diretorio oculto .git, neste .git ficam as configurações que serão usadas para este projeto.

Por exemplo:

$ ls .git
branches config description FETCH_HEAD HEAD hooks index info logs
objects refs

3) Adicionar o repositório, neste exemplo vou usar um que criei para este tutorial, pode ser também o repositório criado no passo 1, o endereço fica na página do projeto (neste caso https://github.com/codexico/tutorial-github):

$ git remote add origin git@github.com:codexico/tutorial-github.git

Formato do comando:

“git remote add” adiciona um repositório ao git que foi iniciado neste diretório, “origin” é o apelido para o projeto, “git@github.com:codexico/tutorial-github.git” é o endereço do projeto.

Resultado:(apareceu a parte [remote “origin”])

$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:codexico/tutorial-github.git
fetch = +refs/heads/*:refs/remotes/origin/*

4) Baixar(pull=puxar) o projeto:

$ git pull origin master

Formato do comando:

git pull apelidoDaOrigem apelidoParaDestino

Saída do comando:

remote: Counting objects: 52278, done.
remote: Compressing objects: 100% (10917/10917), done.
remote: Total 52278 (delta 40975), reused 51715 (delta 40669)
Receiving objects: 100% (52278/52278), 8.33 MiB | 189 KiB/s, done.
Resolving deltas: 100% (40975/40975), done.
From git@github.com:codexico/tutorial-github.git
* branch master -> FETCH_HEAD

3) Usar o git

Exemplo (escolha um nome diferente para o arquivo teste):

$ touch testegit

1) Adicionar as alterações:

– Podemos adicionar somente uma alteração:

$ git add testegit

– Ou adicionar todas as alterações:

$ git add .

Neste passo as alterações ainda não estão sob o controle de versão, elas somente foram adicionadas para quando der um commit.

2) Comitar as alterações:

$ git commit -m "mensagem teste para o tutorial"

É obrigatório acrescentar uma mensagem.

Saída do comando:

[master de2f5ce] teste para o tutorial
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 testegit

Agora as alterações foram adicionadas ao controle de versão. Mas ainda estão somente na máquina local.

3) Enviar(push=empurrar) as alterações:

$ git push origin master

Saída do comando:

Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:codexico/tutorial-github.git
3be4c21..de2f5ce  master -> master

Se durante o tempo em que fez o pull e o push outra pessoa que também participe do projeto fez alterações o push será rejeitado. Então é necessário atualizar o projeto local antes de enviar novas alterações.

$ git fetch origin

Atualizar antes de enviar é uma boa prática a ser seguida para quem usa svn ou cvs e é obrigatória no git.

4)Pronto, confira as alterações no navegador acessando o endereço do projeto (http://github.com/codexico/tutorial-github neste exemplo).

Dica final: para que não precise digitar sempre a senha do ssh siga os passos desse link: http://help.github.com/working-with-key-passphrases/

Atualizado em 09/09/2010, mudei o repositório e adicionei instruções para gerar a chave ssh.


Publicado

em

,

por

Tags:

Comentários

52 respostas para “Tutorial simples: Como usar o git e o github”

  1. Avatar de Kleber Shimabuku

    Muito bacana o tutorial! valeu! 🙂

  2. Avatar de Kleber Correia
    Kleber Correia

    Parabéns pela iniciativa! Mto bom tuto!!!

    Vale lembrar: é necessário criar a chave rsa… id_rsa e id_rsa.pub….
    http://help.github.com/msysgit-key-setup/

    Abraços!!!

    😉

  3. Avatar de codexico

    Hehehe, 2 comentários de 2 Kleber.

    @Kleber1 – estamos aí pra isso, qq coisa é só chamar!

    @Kleber2 – valeu, eu fiz o tutorial só para o linux né, vários já me pediram para colocar as instruções para windows também, estou pensando se atualizo este ou faço um outro post, o lance é que raramente uso windows, então vou ter q aprender e testar as ferramentas antes para poder escrever, me ajuda?

  4. Avatar de Kleber Correia
    Kleber Correia

    Então cara e só uso linux tb! Ubuntu 10.04… não meu caso foi necessário gerar a chave….
    Da uma olhada:

    http://help.github.com/linux-git-installation/

    http://help.github.com/linux-key-setup/

  5. Avatar de marco antonio
    marco antonio

    Olá, parabéns pelo tutorial.
    Uma sugestão: faltou dizer como se faz para recuperar um commit.
    Abraço!

  6. Avatar de
    Anônimo

    Para recuperar modificações há algumas possibilidades:1) O arquivo foi modificado mas ainda não foi dado commit:git checkout -- arquivomodificado2) O arquivo foi modificado e foi dado commit:git log --pretty=onelineIdentifique o SHA do commit que deseja que seja o atual e substitua no comando:git reset --hard b8551c9354ee071349f104e3867e57ea7b220c69O problema é que pode ser que vc queira de novo as modificações e é difícil recuperar (git reflog, git log -g ), a melhor maneira é criar um branch para o código com as modificações e só depois excluir os commits no branch priincipal.Vou mostrar como funcionam branchs e merges na parte 2 do tutorial.

  7. Avatar de Nataliel Vasconcelos
    Nataliel Vasconcelos

    Otimo post! parabens

  8. Avatar de Filipe Acácio
    Filipe Acácio

    Ótimo post! Parabéns!

  9. Avatar de Régis
    Régis

    Codexico, como você configura esses códigos pra ficar numerado com fundo preto no blog? Eu li o código fonte da página mas não consegui.

  10. Avatar de Thiago Marques

    Muito simples e útil seu tutorial. valeo!

  11. Avatar de Thiago Marques

    Muito simples e útil seu tutorial. valeo!

  12. Avatar de Thiago Marques

    Muito simples e útil seu tutorial. valeo!

  13. Avatar de Cássio Nandi Citadin

    Curti o tutorial codexico. Nas várias leituras que fiz essa semana sobre o assunto, foi esse post que abriu minha mente. Esse conceito de gerenciamento local eu nunca tinha me tocado.

  14. Avatar de Guilherme Souza
    Guilherme Souza

    Aprendi com este tutorial e já estou fazendo uso do conhecimento adquirido. Muito bacana a iniciativa. Foi muito bem detalhado e de fácil aprendizado. Parabéns!!!

  15. Avatar de Quelzita2008
    Quelzita2008

    muito bom o post!! gostei e ja divulguei para alguns amigos!! 

  16. Avatar de Leandro Gomes da Silva

    Olá,, já possuía um projeto no Git mas tive que formatar  meu pc… Estou tentando continuar o projeto mas não está dando… quando dou o comando git push origin master ele retorna “Permission denied (publickey).
    fatal: The remote end hung up unexpectedly”

  17. Avatar de Siya
    Siya

    Eu não tenho palavras para apreciar este post ….. estou realmente impressionado…. a pessoa que criou este post certamente sabia bem o assunto .. obrigado por compartilhar isso conosco. 
    Gali Gali Chor Hai Songs

  18. Avatar de Simar
    Simar

    Eu estava na necessidade real de tal site.I um estou muito ajudado por este sitecomo eu sempre recebo here.Thanks post de inspiração e de instrução para tomar o tempo para conversar tudo de tal maneira ao longo this.Go.
    Jodi Breakers Songs

  19. […] e mais opções:codexico parte 1codexico parte 2 The Git Community Book Share this:TwitterFacebookEmailPrintGostar disso:GostoSeja o […]

  20. Avatar de Diego Souza
    Diego Souza

    Obrigado! me ajudou a descomplicar o Git/Github

  21. Avatar de Felipe Duarte
    Felipe Duarte

    Prezado(a),

        Muito bom este artigo meu ajudou bastante..

  22. Avatar de Ronaldo Richieri

    Olá! Muito fera teu tutorial! Grato! e Parabéns!

  23. Avatar de Hélio Barbosa

    pra cada projeto (php, java, whatever) que eu crio eu tenho que criar um repositório? 
    Com subversion eu tenho um repositório só e quando preciso mexer em um projeto só baixo o diretório daquele projeto, há algo parecido no git ou tenho que clonar o repositório inteiro?

    1. Avatar de codexico

      Hélio, para trabalhar dessa maneira teria que clonar o repositório todo mesmo. Mas é fácil criar novos repositórios e tem a vantagem de que se der algum problema, algo que ocorre menos no git do que no svn, o problema ocorre em um só.
      Com um repositório para cada projeto pode-se por exemplo usar um gitignore diferente para os projetos em php e java, também o repositório não fica tão grande se for separado e se você estiver em um computador diferente é só clonar o projeto que quiser.
      O processo de deploy fica facilitado se usar um repositório para cada projeto, você pode configurar por exemplo para enviar os arquivos ao servidor de testes ou ao de produção automaticamente dependendo de qual branch estiver usando.
      Só vejo vantagens em usar um repositório para cada projeto.

    2. Avatar de codexico

       Hélio, para trabalhar dessa maneira teria que clonar o repositório todo mesmo. Mas é fácil criar novos repositórios e tem a vantagem de que se der algum problema, algo que ocorre menos no git do que no svn, o problema ocorre em um só.
      Com  um repositório para cada projeto  pode-se por exemplo usar um gitignore diferente para os projetos em php e java, também o repositório não fica tão grande se for separado e se você estiver em um computador diferente é só clonar o projeto que quiser.
      O processo de deploy fica facilitado se  usar um repositório para cada projeto, você pode configurar por exemplo para enviar os arquivos ao servidor de testes ou ao de produção automaticamente dependendo de qual branch estiver usando.
      Só vejo vantagens em usar um repositório para cada projeto.

  24. Avatar de robmachado
    robmachado

    Muito, mas muito útil mesmo !!! me ajudou bastante … um excelente mini tutorial.

  25. Avatar de Vanderson
    Vanderson

    Cara muito bom o tuto aqui em, me ensinou bastante. Vaelu!

  26. Avatar de Renato Tavares

    Minha dúvida pode ser boba porém acho válida, quando estou construindo um sistema sozinho e do zero, usar GIT é uma boa pedida? estou testando aqui porém acho que ele ta me deixando pouco produtivo pois sempre tenho que alterar arquivos e corrigir bugs e construir coisas. gosto do git porém ele não seria melhor para controlar um sistema depois que ele sai do desenvolvimento? ja ganha sua primeira TAG e por ai adiante?

    1. Avatar de codexico

      É Renato, muitas vezes a gente vai desenvolvendo sozinho e do zero, fazendo partes meio aleatórias do projeto, naquela fase em que na verdade a gente tá criando mesmo algo, tem muita coisa que a gente vai colocando e tirando no código muito rápido, a gente tá fazendo uma parte e descobre que precisava fazer outra antes e por aí vai, pode ser um pouco mais ágil fazer commits mais esparsos.

      Como vc disse, depois que o projeto estiver mais consistente aí dá pra controlar melhor.
      Nesse caso acho que a melhor regra seria “fiz algo importante que vale a pena perder algum tempinho para commitar e explicar?”.

      O git vai melhor quando a gente usa alguma metodologia tipo scrum ou algo assim onde a gente divide as tarefas.
      Eu gosto das metodologias ágeis, mesmo quando estou fazendo algo sozinho e do zero. Na verdade eu uso pra mim mesmo GTD + pomodoro, o GTD para dividir as tarefas e o pomodoro para controlar a execução, assim eu paro de tempos em tempos para rever e que fiz e aproveito e dou um git.

      1. Avatar de Renato Tavares

        Obrigado pela resposta. Outra vez parabéns

  27. Avatar de Lorena Adrian
    Lorena Adrian

    Dúvida: como faço para dar “check out” quando estou trabalhando com 1 solução – ou seja, tenho 1 projeto de software, vários usuários acessando esse repositório e preciso dar checkout para que outro não consiga alterar enquanto estou mexendo???

    1. Avatar de codexico

      O git não tem um needs-lock como no svn, a ideia é essa mesma, ser um sistema distribuído em que todos podem trabalhar offline e os conflitos sejam resolvidos no merge.

      Uma opção é ter um repositório central onde você pode controlar os merges, então cada desenvolvedor manda para um branch e você decide se aquela alteração entra no repositório central, como um pull-request.

      Quem sabe algo como a opção core.sharedRepository pode ajudar também.

  28. Avatar de Daniel Albino
    Daniel Albino

    Vlw bróder!!!
    Estava patinando pra configurar essa parada, mas com seu tutorial eu consegui.
    []’s

  29. Avatar de Marcelo
    Marcelo

    Valeu! Ajudou bastante,

  30. Avatar de Rafael Freitas
    Rafael Freitas

    Seu tutorial foi de grande utilidade para mim, muito obrigado!

  31. Avatar de Fabiano Maximiano
    Fabiano Maximiano

    Parabens pelo tutorial, estava levando um coro e nao sabia nem por onde começar a utilizar o GIT.
    Agora vou deixar de ser junior!!!

  32. Avatar de Henrique Souza
    Henrique Souza

    Muito bom artigo! Agora.. fiquei com uma dúvida: como faço para apagar os arquivos e diretórios do GitHub via Git?

  33. Avatar de Gabriel Darezzo
    Gabriel Darezzo

    Legal segui seu tutu e foi certinho

    Tive problemas só pra gerar ssh
    Peguei mais info no oficial:
    https://help.github.com/articles/generating-ssh-keys

  34. Avatar de Cléber Otaviano
    Cléber Otaviano

    Sensacional!!!

  35. Avatar de Danilo Agostinho
    Danilo Agostinho

    Boas dica, apenas precisam serem atualizadas. O post foi publicado em 2010, mais ainda dá pra seguir direitinho.

  36. Avatar de Cerebro Vasconcelos

    o meu ta dando erro, não consigo commitar, num tem uma parte de uma parte de configuração de token

    git config –global github.token your_token

  37. Avatar de Caio Cutrim
    Caio Cutrim

    valeu brother 🙂

  38. Avatar de Cornélio José Wiedemann
    Cornélio José Wiedemann

    amazing brow
    valeu ai negrao
    curti pacas
    😀

  39. Avatar de Jones
    Jones

    rapaz nem sei por onde começar, não entendi nada! =/

  40. Avatar de Jonatan Alves
    Jonatan Alves

    Pessoal , vocês conhecem uma forma de pesquisar projetos do github e retornar com download todos os projetos de uma vez ? Por exemplo na api do git (https://api.github.com/search/repositories?q=forks:20+language:java&sort=stars&order=desc) consigo retornar todos os projetos em java , com maiores estrelas e com 20 forks . mas não consigo fazer download desses projetos encontrados . Não é trivial fazer o download de um por um , seria necessário download em lote , sei ainda que o git bloqueia 20 downloads de projetos por minuto , mas não sei como fazer estes download em lote . Alguém conhece um script que faça isso ou tem alguma ideia ? Obrigado !

    1. Avatar de kndrio
      kndrio

      Faz um script dando git clone dos projetos que você encontrou.

  41. Avatar de husmeck
    husmeck

    $ git remote add origin git@github.com:codexico/tutorial-github.git

    eu tentei usando esses passos mas n vejo nada no meu github

  42. Avatar de Renoir Faria
    Renoir Faria

    Olá, excelente tutorial!!

    btw, qual é o plugin que você usa para mostrar códigos?

    1. Avatar de codexico

      O plugin é esse: https://wordpress.org/plugins/codecolorer/
      Ainda bem que perguntou, fui olhar e está sem atualizações faz 2 anos, talvez seja hora de mudar, apareceram alguns problemas já, em outro post cortou um pouquinho do código.
      Valeu!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *