<!doctype html> <html> <head> <meta charset="utf-8"> <title>git-start</title> <style type="text/css"> body { background: #fff; color: #333; font: 14px/1.6 Helvetica,arial,freesans,clean,sans-serif; margin: 20px; padding: 0; } h1,h2,h3,h4,h5,h6 { font-weight: bold; margin: 20px 0 10px; padding: 0; } h1 { color: #000; font-size: 28px; } h2 { border-bottom: 1px solid #ccc; color: #000; font-size: 24px; } h3 { font-size: 18px; } h4 { font-size: 16px; } h5,h6 { font-size: 14px; } h6 { color: #777; } blockquote,dl,ol,p,pre,table,ul { border: 0; margin: 15px 0; padding: 0; } ul,ol { padding-left: 30px; } ol li > :first-child, ol li ul:first-of-type, ul li > :first-child, ul li ul:first-of-type { margin-top: 0; } ol ol,ol ul,ul ol,ul ul { margin-bottom: 0; } h1 + p,h2 + p,h3 + p,h4 + p,h5 + p,h6 + p { margin-top: 0; } table { border-collapse: collapse; border-spacing: 0; font-size: 100%; font: inherit; } table tr { border-top: 1px solid #ccc; background: #fff; } table tr:nth-child(2n) { background: #f8f8f8; } table th, table td { border: 1px solid #ccc; padding: 6px 13px; } table th { font-weight: bold; } pre,code,tt { font-family: Consolas,"Liberation Mono",Courier,monospace; font-size: 12px; } code,tt { background: #f8f8f8; border-radius: 3px; border: 1px solid #eaeaea; margin: 0 2px; padding: 0 5px; } pre { background: #f8f8f8; border-radius: 3px; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; } pre > code,pre > tt { background: transparent; border: 0; margin: 0; padding: 0; } pre > code { white-space: pre; } a { color: #4183c4; text-decoration: none; } a:hover { text-decoration: underline; } /* Alterado por Fernando A. Damião */ code { color: #BB0000; } pre code { color: #000; } blockquote { color: #aaa; font-style: italic; } </style> </head> <body> <h1 id="git-start">git-start</h1> <ul> <li>Descrição: Guia básico de utilização do sistema de controle de versão Git.</li> <li>Versão do Guia: 1.0</li> <li>Escrito por: Fernando A. Damião <me@fadamiao.com></li> <li>Escrito em: 2012-11-12 por Fernando A. Damião</li> <li>Última alteração: 2013-07-25 por Bruno Gurgel</li> <li>Licença: <a href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">Creative Commons Attribution-ShareAlike 3.0 Unported License.</a></li> </ul> <p>Este guia tem o intuito de demonstrar a instalação e utilização básica do sistema de controle de versão de códigos Git.</p> <p>Tudo o que for demonstrado aqui pode ser utilizado em qualquer sistema operacional com Git instalado, mas mantendo o foco para utilização interna do Git, portanto não será abordada a utilização em sites como <a href="https://github.com">GitHub</a> e <a href="https://bitbucket.org">BitBucket</a>.</p> <p>Vale lembrar que esse guia apenas demonstra funcionalidades básicas, ou seja, estão incluídos e explicados comandos com foco para o dia-a-dia.</p> <p><strong>OBS:</strong> No Git não existem papeis fixos, ou seja, não existem clientes e servidores definidos, pois o Git acaba dependendo muito mais do protocolo que será utilizado para a transferência de dados (Exs. HTTP, SSH) que uma hierarquia.</p> <p>Mas para entendermos melhor serão utilizados os termos cliente e servidor, sendo o cliente uma máquina que consome repositórios e servidor uma máquina que disponibiliza repositórios.</p> <p>Para aproveitar melhor e evitar problemas opte por centralizar os repositórios em uma única máquina.</p> <h2 id="indice">Índice</h2> <ul> <li><a href="#passos-para-instalar-o-git">Passos para Instalar o Git</a><ul> <li><a href="#instalando-o-git-no-windows">Instalando o Git no Windows</a></li> <li><a href="#instalando-o-git-no-linux-debian-e-derivados">Instalando o Git no Linux (Debian e Derivados)</a></li> </ul> </li> <li><a href="#configurando-o-ambiente">Configurando o ambiente</a><ul> <li><a href="#nome-e-eemail">Nome e Email</a></li> <li><a href="#chave-ssh">Chave SSH</a></li> </ul> </li> <li><a href="#usando-o-git">Usando o Git</a><ul> <li><a href="#lidando-com-repositorios">Lidando com repositórios</a><ul> <li><a href="#no-lado-do-servidor">No lado do servidor</a></li> <li><a href="#no-lado-do-cliente">No lado do cliente</a></li> </ul> </li> <li><a href="#lidando-com-arquivos">Lidando com arquivos</a><ul> <li><a href="#adicionando-arquivo">Adicionando arquivo</a></li> <li><a href="#removendo-arquivo">Removendo arquivo</a></li> <li><a href="#deixando-uma-mensagem">Deixando uma mensagem</a></li> </ul> </li> <li><a href="#lidando-com-rotas">Lidando com rotas</a><ul> <li><a href="#adicionando-uma-rota-de-envio">Adicionando uma rota de envio</a></li> <li><a href="#renomeando-uma-rota">Renomeando uma rota</a></li> <li><a href="#trocando-a-url-de-uma-rota">Trocando a URL de uma rota</a></li> <li><a href="#removendo-uma-rota">Removendo uma rota</a></li> <li><a href="#listando-rotas">Listando rotas</a></li> </ul> </li> <li><a href="#obtendo-repositorios">Obtendo repositórios</a></li> <li><a href="#lidando-com-branches">Lidando com Branches</a><ul> <li><a href="#criando-um-novo-branch">Criando um novo branch</a></li> <li><a href="#mudando-de-branch">Mudando de branch</a></li> <li><a href="#criar-e-mudar-de-branch">Criar e mudar de branch</a></li> </ul> </li> <li><a href="#atualizando-o-repositorio">Atualizando o repositório</a></li> <li><a href="#visualizando-alteracoes">Visualizando alterações</a></li> <li><a href="#pedindo-ajuda">Pedindo ajuda</a></li> <li><a href="#resumo-geral">Resumo Geral</a><ul> <li><a href="#repositorio-nao-existe">Repositório não existe</a></li> <li><a href="#repositorio-ja-existe">Repositório já existe</a></li> </ul> </li> </ul> </li> <li><a href="#links-de-ajuda">Links de ajuda</a></li> <li><a href="#referencias">Referências</a></li> <li><a href="#vale-a-pena-ver">Vale a pena ver</a></li> <li><a href="#conclusao">Conclusão</a></li> </ul> <h2 id="passos-para-instalar-o-git">Passos para instalar o Git</h2> <h3 id="instalando-o-git-no-windows">Instalando o Git no Windows</h3> <p>Primeiro, baixe o Git do <a href="http://git-scm.com/download/win">site oficial</a>.</p> <p>Considerando que o Git foi baixado, faça uma cópia do seu 'find.exe' e 'sort.exe' que estão localizados, provavelmente, em 'C:\system32'.</p> <p>Feito isso, inicie o instalador e siga os passos abaixo:</p> <pre><code>-> Welcome to the Git Setup Next > -> Information Next > -> Select Components Next > -> Adjusting your PATH environment Selecione a opção 'Run Git and included UNIX tools from the Windows Command Prompt' Next > -> Choosing the SSH executable Selecione a opção 'Use OpenSSH' Next > -> Configuring the line ending conversions Selecione a opção 'Checkout Windows-style, commit Unix-style line endings' Next > </code></pre> <h3 id="instalando-o-git-no-linux-debian-e-derivados">Instalando o Git no Linux (Debian e derivados)</h3> <p>Entre no terminal como um usuário normal e digite:</p> <pre><code>$ sudo apt-get install git git-core </code></pre> <h2 id="configurando-o-ambiente">Configurando o ambiente</h2> <p>Com o Git instalado precisamos definir algumas coisas para a sua utilização, como nome e email que aparecerão nos commits, e caso seja feita a utilização de transferência de arquivos via SSH, uma chave RSA.</p> <p><strong>OBS:</strong> Esses passos devem ser feitos independente do sistema operacional utilizado.</p> <h3 id="nome-e-email">Nome e email</h3> <p>Configure o nome e o email com o comando 'git config', eles aparecerão publicamente em commits, que servem para indicar quem fez as alterações, falaremos mais sobre o commit adiante.</p> <pre><code>$ git config --global user.name "Seu nome" $ git config --global user.email "seunome@email.com" </code></pre> <p>Para conferir se está tudo configurado corretamente.</p> <pre><code>$ git config --global user.name $ git config --global user.email </code></pre> <p>Caso queira apagar as configurações.</p> <pre><code>$ git config --global --unset user.email $ git config --global --unset user.name </code></pre> <p><strong>OBS:</strong> Todas as configurações feitas ficam salvas em um arquivo chamado '.gitconfig' no diretório home de seu usuário.</p> <h3 id="chave-ssh">Chave SSH</h3> <p>Um dos modos mais comuns de utilizar Git é via SSH, para facilitar a utilização, ou seja, não ter que digitar a senha a todo o momento, gere uma chave SSH.</p> <pre><code>$ ssh-keygen -t rsa -C "Local Server" </code></pre> <p>A chave pode ser gerada com uma senha simples ou até em branco, de a preferência da utilização com senha.</p> <p>O parâmetro '-C "Local Server"' é um comentário, utilize para indicar onde será utilizada essa chave.</p> <p>Depois de gerada a chave pegue a chave pública, provavelmente o arquivo 'id_rsa.pub' dentro do diretório '.ssh' localizado no seu diretório home, e envie para o administrador do servidor onde está o Git.</p> <h2 id="usando-o-git">Usando o Git</h2> <p>Com o ambiente já preparado, podemos (finalmente) começar a utilizar o Git.</p> <p>Apesar de existirem diversos clientes gráficos somente abordaremos a utilização via linha de comando.</p> <p><strong>OBS:</strong> Todos os comandos devem ser feitos dentro do diretório do repositório desejado.</p> <h3 id="lidando-com-repositorios">Lidando com repositórios</h3> <h4 id="no-lado-do-servidor">No lado do servidor</h4> <p>Existem duas maneiras de lidar com repositórios, no lado do cliente e no lado do servidor.</p> <p>Para que toda a equipe possa utilizar o mesmo repositório, precisamos iniciar o repositório no servidor.</p> <pre><code>$ mkdir repositorio $ cd repositorio $ git init --bare </code></pre> <p>O comando 'git init --bare' criará a estrutura de diretórios e arquivos responsáveis por abrigar os arquivos.</p> <h4 id="no-lado-do-cliente">No lado do cliente</h4> <p>No cliente o processo de inicialização é bem similar:</p> <pre><code>$ mkdir repositorio $ cd repositorio $ git init </code></pre> <p><strong>OBS:</strong> Os comandos 'mkdir' e 'cd' não pertencem ao Git.</p> <h3 id="lidando-com-arquivos">Lidando com arquivos</h3> <p>Após todas as alterações feitas precisamos envia-las.</p> <p>O fluxo de envio é basicamente o seguinte:</p> <ul> <li>add/rm</li> <li>commit</li> <li>push</li> </ul> <p>Após cada alteração (add/rm), precisamos detalhar o que foi feito/porque foi feito, e isso é feito com um commit, após isso podemos enviar as alterações com um push.</p> <h4 id="adicionando-arquivo">Adicionando arquivo</h4> <p>Para um arquivo ser incluído utilize o comando 'git add' e nome do arquivo.</p> <pre><code>$ git add README </code></pre> <h4 id="removendo-arquivo">Removendo arquivo</h4> <p>Para um arquivo ser removido utilize o comando 'git rm' e nome do arquivo.</p> <pre><code>$ git rm README </code></pre> <h4 id="deixando-uma-mensagem">Deixando uma mensagem</h4> <p>A cada inclusão/alteração/exclusão de arquivos, existe a necessidade de especificar o que foi feito, para isso utilizamos o comando 'git commit'.</p> <pre><code>$ git commit -m "Mensagem" </code></pre> <p>O parâmetro -m é utilizado para quando queremos descrever um commit na própria linha de comando.</p> <p>Caso necessite de um maior detalhamento apenas utilize o comando 'git commit' e o editor de textos padrão de seu usuário será aberto.</p> <p><strong>OBS:</strong> O comando 'git commit' só funciona após alguma alteração no repositório (add/rm).</p> <h4 id="enviando-alteracoes">Enviando alterações</h4> <p>Depois de feitas às alterações e comentadas, pode ser feito o envio para o servidor com o comando 'git push' seguida da rota.</p> <pre><code>$ git push origin master </code></pre> <h3 id="lidando-com-rotas">Lidando com rotas</h3> <p>Aprendemos anteriormente como enviar alterações para o servidor, mas podemos ter diferentes rotas de envio.</p> <h4 id="adicionando-uma-rota-de-envio">Adicionando uma rota de envio</h4> <p>Com o exemplo do comando 'git init', no lado do cliente, precisamos definir para onde irão os arquivos com o comando 'git remote add'.</p> <pre><code>$ git remote add origin git@192.168.0.100:/home/webmaster/repositorio </code></pre> <p>Como não existe nenhuma rota no exemplo, ela será criada como master.</p> <h4 id="renomeando-uma-rota">Renomeando uma rota</h4> <p>Caso seja necessário renomear uma rota utilize o comando 'git remote rename' rota_antiga rota_nova.</p> <pre><code>$ git remote rename origin destination </code></pre> <p><strong>OBS:</strong> Esse comando somente renomeia a rota.</p> <h4 id="trocando-a-url-de-uma-rota">Trocando a URL de uma rota</h4> <p>Caso seja necessário trocar a URL de destino utilize o comando 'git remote set-url' rota nova_url.</p> <pre><code>$ git remote set-url origin git@192.168.0.100:/home/webmaster/nova_url </code></pre> <h4 id="removendo-uma-rota">Removendo uma rota</h4> <p>Caso não seja mais necessária à rota utilize o comando 'git remote rm' rota.</p> <pre><code>$ git remote rm origin </code></pre> <h4 id="listando-rotas">Listando rotas</h4> <p>Para verificar todas as rotas do repositório utilize o parâmetro -v no comando 'git remote'.</p> <pre><code>$ git remote -v </code></pre> <h3 id="obtendo-repositorios">Obtendo repositórios</h3> <p>Para obter um repositório basta utilizar o comando 'git clone' seguido da URL.</p> <pre><code>$ git clone git@192.168.0.100:/home/webmaster/repositorio </code></pre> <h3 id="lidando-com-branches">Lidando com Branches</h3> <p>Um branch auxilia no momento de criar, testar ou corrigir funcionalidades.</p> <p>Pensando no repositório como uma árvore, um branch seria um ramo dessa árvore, mas funcionando de forma independente, o que é ideal para coisas mais experimentais.</p> <h4 id="criando-um-novo-branch">Criando um novo branch</h4> <p>Para criar um branch utilize o comando 'git branch' e informe o nome do branch.</p> <pre><code>$ git branch testes </code></pre> <h4 id="mudando-de-branch">Mudando de branch</h4> <p>Para mudar de branch, utilize o comando 'git checkout' e o branch desejado.</p> <pre><code>$ git checkout master </code></pre> <h4 id="criar-e-mudar-de-branch">Criar e mudar de branch</h4> <p>Para criar e automaticamente mudar de branch.</p> <pre><code>$ git checkout -b testes </code></pre> <p>O parâmetro '-b' no comando 'git checkout', verifica a existência do branch 'testes' e muda para ele, caso não exista ele o cria.</p> <h3 id="atualizando-o-repositorio">Atualizando o repositório</h3> <p>Após baixarmos um repositório para a máquina, ele provavelmente receberá modificações, ou seja, ele não é atualizado automaticamente.</p> <p>Para atualizar o repositório precisamos de dois comandos 'git fetch' e 'git merge' O comando 'git fetch' baixa as alterações, mas não as mescla no repositório, para mesclarmos as alterações precisamos do comando 'git merge'.</p> <pre><code>$ git fetch $ git merge origin/master </code></pre> <p>Para não ter que ficar digitando dois comandos todas as vezes, basta utilizar o comando 'git pull'.</p> <p>O comando 'git pull' executa sozinho, e de uma vez, os comandos 'git fetch' e 'git merge', atualizando o repositório.</p> <pre><code>$ git pull </code></pre> <p><strong>OBS:</strong> Cuidado com conflitos com alterações que não foram enviadas.</p> <h3 id="visualizando-alteracoes">Visualizando alterações</h3> <p>Você pode visualizar as alterações dos repositórios com o comando 'git log'.</p> <pre><code>$ git log </code></pre> <p><strong>OBS:</strong> Essa forma exibe todos os commits de forma detalhada, incluindo autor e email do commit.</p> <p>Para uma exibição mais simples, ou seja somente com a mensagem do commit utilize o parâmetro '--oneline'.</p> <pre><code>$ git log --oneline </code></pre> <h3 id="pedindo-ajuda">Pedindo ajuda</h3> <p>Quando nos esquecemos de algum comando ou parâmetro o git possui manuais próprios, basta utilizar o comando 'git help'.</p> <pre><code>$ git help </code></pre> <p>Quando a dúvida é relacionada a um comando em específico, basta informar o comando.</p> <pre><code>$ git help commit </code></pre> <p><strong>OBS:</strong> Quando o comando é executado em uma máquina com Windows o manual irá aparecer no navegador padrão da máquina, se executado em Linux/Mac OS X ele abrirá uma man-page normalmente.</p> <h3 id="resumo-geral">Resumo Geral</h3> <p>O resumo demonstra como operar um repositório, adicionar um arquivo, adicionar um commit, e enviar as alterações em dois cenários um sem existir o repositório e o outro existindo o repositório.</p> <h4 id="repositorio-nao-existe">Repositório não existe</h4> <p>Faça esses comandos no servidor:</p> <pre><code>$ mkdir repositorio $ cd repositorio $ git init --bare </code></pre> <p>Faça esses comandos no cliente:</p> <pre><code>$ mkdir repositorio $ cd repositorio $ touch README $ git init $ git add README $ git commit -m "Inclusão do README" $ git remote add origin git@192.168.0.100:/home/webmaster/repositorio $ git push -u origin master </code></pre> <h4 id="repositorio-ja-existe">Repositório já existe</h4> <p>Comandos apenas para o cliente:</p> <pre><code>$ git clone git@192.168.0.100:/home/webmaster/repositorio $ git add README $ git commit -m 'Comentário sobre inclusão/atualização/modificação feita' $ git push -u origin master </code></pre> <h2 id="links-de-ajuda">Links de ajuda</h2> <p>Os links abaixo são guias mais detalhados para utilização do Git:</p> <ul> <li><a href="http://net.tutsplus.com/tutorials/other/easy-version-control-with-git/">Easy Version Control with Git</a> em en_US</li> <li><a href="http://gitimmersion.com/">Git Immersion</a> em en_US - Passo-a-Passo sobre como utilizar Git.</li> <li><a href="http://gitready.com/">git ready</a> em en_US</li> <li><a href="https://help.github.com/">github:help</a> em en_US - Foca a utilização do Git no site GitHub, mas possui guias/tutoriais que auxiliam em utilizações fora do site.</li> <li><a href="http://ftp.newartisans.com/pub/git.from.bottom.up.pdf">Git from the bottom up</a> em en_US - Guia bem detalhado sobre Git.</li> <li><a href="https://github.com/rapid7/metasploit-framework/wiki/Git-cheatsheet">Rapid7 - Git Cheatsheet</a> em en_US</li> </ul> <h2 id="referencias">Referências</h2> <p>Além dos links de ajuda, esses links ajudam a compreender mais sobre o assunto e ajudaram a escrever esse guia.</p> <ul> <li><a href="http://git-scm.com/">Site oficial do Git</a> em en_US</li> <li><a href="http://gitref.org/">Git Reference</a> em en_US</li> <li><a href="http://rogerdudler.github.com/git-guide/index.pt_BR.html">git - guia prático</a> em pt_BR</li> <li><a href="https://github.com/InFog/ApostilaGit/blob/master/apostilagit.pdf">Apostila de introdução ao controle de versões com Git</a> em pt_BR</li> <li><a href="http://rogerdudler.github.com/git-guide/files/git_cheat_sheet.pdf">git cheat sheet</a> em en_US</li> </ul> <h2 id="vale-a-pena-ver">Vale a pena ver</h2> <p>Para continuar os estudos, cadastre-se nesses sites e suba os seus repositórios:</p> <ul> <li><a href="https://github.com">GitHub</a> em en_US</li> <li><a href="https://bitbucket.org">Bitbucket</a> em en_US</li> </ul> <p>Para aprender passo a passo:</p> <ul> <li><a href="http://try.github.com">Try Git</a> em en_US</li> <li><a href="http://gitimmersion.com/">Git Immersion</a> em en_US</li> <li><a href="http://www.codeschool.com/courses/git-real">Git Real</a> em en_US</li> <li><a href="http://www.codeschool.com/courses/git-real-2">Git Real 2</a> em en_US</li> </ul> <h2 id="conclusao">Conclusão</h2> <p>Sem dúvida nenhuma o Git é uma ferramenta poderosa, todos os comandos demonstrados nesse guia são para auxiliar no dia-a-dia da utilização do Git.</p> <p>Obviamente existem diversos comandos e parâmetros que não foram citados aqui, mas esse não é o intuito deste guia.</p> <p>O intuito é dar uma noção um pouco além da básica para a operação desse sistema de controle de versão.</p> </body> </html>