Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_o_git_gitolite_gitweb_git-daemon_gitstats_debian_squeeze_pt_br [2019/08/08 15:23] (current)
Line 1: Line 1:
 +====== Instalando e Configurando o Git +  Gitolite + GitWeb + Git-daemon + GitStats + Debian Squeeze ======
  
 +
 +Git é um sistema de controle de versão distribuído com ênfase em velocidade. O Git foi inicialmente projetado e desenvolvido por Linus Torvalds para o desenvolvimento do kernel Linux.
 +
 +Cada diretório de trabalho Git é um repositório com todos os históricos e habilidade total de controle das revisões, não dependente de acesso a uma rede ou a um servidor central.
 +
 +A manutenção de software do Git é atualmente supervisionada por Junio Hamano. É distribuído sob os termos da versão 2 da GNU General Public License.
 +
 +Informações sobre o [[http://​pt.wikipedia.org/​wiki/​Git | Git ]]
 +
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
 +
 +
 +Valores utilizados:
 +
 +  - Ip do servidor: 10.101.0.11
 +  - Ip do cliente: 10.101.0.1
 +
 +
 +Vamos instalar o core do git no servidor.
 +<sxh bash>
 +aptitude install git-core git-doc -y
 +</​sxh>​
 +
 +Agora vamos instalar o git no cliente
 +<sxh bash>
 +
 +aptitude install git-core git-doc -y
 +</​sxh>​
 +
 +Agora vamos configurar alguns valores globais do git, devemos configurar no cliente.
 +
 +Vamos configurar o nome do autor dos códigos
 +<sxh bash>
 +
 +git config --global user.name "​Douglas Quintiliano dos Santos"​
 +</​sxh>​
 +
 +Agora vamos configurar o email do autor dos códigos
 +<sxh bash>
 +
 +git config --global user.email douglas@douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora vamos acertar as variáveis para deixar alguns valores do nosso git coloridos, facilita a visualização.
 +<sxh bash>
 +
 +git config --global color.status auto
 +git config --global color.branch auto
 +</​sxh>​
 +
 +Podemos visualizar as variáveis globais que configuramos para o git da seguinte forma
 +<sxh bash>
 +
 +git config -l
 +user.name=Douglas Quintiliano dos Santos
 +user.email=douglas@douglasqsantos.com.br
 +color.status=auto
 +color.branch=auto
 +</​sxh>​
 +
 +Agora no cliente vamos gerar as chaves de ssh tipo rsa que vai ser o nosso acesso ao servidor git
 +<sxh bash>
 +
 +ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​home/​douglas/​.ssh/​id_rsa):​ #ENTER
 +Enter passphrase (empty for no passphrase):​ #ENTER
 +Enter same passphrase again: #ENTER
 +Your identification has been saved in /​home/​douglas/​.ssh/​id_rsa.
 +Your public key has been saved in /​home/​douglas/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +c6:​55:​64:​a9:​a6:​cd:​1c:​c6:​dd:​43:​c6:​15:​83:​41:​2e:​04 douglas@ddouglasqsantos.com.br
 +The key's randomart image is:
 ++--[ RSA 2048]----+
 +|         ​E.o=====o+o|
 +|          .oo.+ .|
 +|         ..+ =   |
 +|       . .* o o  |
 +|        SB .   . |
 +|       .. +      |
 +|                 |
 +|                 |
 +|                 |
 ++-----------------+
 +</​sxh>​
 +
 +Agora vamos copiar a chave do cliente para o servidor git para importarmos com o gitolite
 +<sxh bash>
 +
 +scp ~/​.ssh/​id_rsa.pub 10.101.0.11:/​tmp/​douglas.pub
 +douglas@10.101.0.11'​s password: ​
 +id_rsa.pub ​                                   100%  407     ​0.4KB/​s ​  ​00:​00  ​
 +</​sxh>​
 +
 +Agora no servidor vamos configurar o gitolite
 +
 +Agora vamos criar o grupo para o gitolite
 +<sxh bash>
 +
 +groupadd gitolite
 +</​sxh>​
 +
 +Agora vamos criar o usuário para o gitolite
 +<sxh bash>
 +
 +adduser --disabled-password --home /​home/​gitolite --ingroup gitolite gitolite
 +Adicionando usuário '​gitolite'​ ...
 +Adicionando novo usuário '​gitolite'​ (1001) com grupo '​gitolite'​ ...
 +Criando diretório pessoal '/​home/​gitolite'​ ...
 +Copiando arquivos de '/​etc/​skel'​ ...
 +Modificando as informações de usuário para gitolite
 +Informe o novo valor ou pressione ENTER para aceitar o padrão
 +  Nome Completo []: #ENTER
 +  Número da Sala []: #ENTER
 +  Fone de Trabalho []: #ENTER
 +  Fone Doméstico []: #ENTER
 +  Outro []: #ENTER
 +A informação está correta? [S/n] s
 +</​sxh>​
 +
 +Agora vamos instalar o gitolite ​
 +<sxh bash>
 +
 +aptitude install gitolite -y
 +</​sxh>​
 +
 +Agora vamos inserir o gitolite no grupo do apache
 +<sxh bash>
 +
 +usermod -a -G gitolite www-data
 +</​sxh>​
 +
 +Agora vamos configurar o gitolite
 +
 +Vamos abrir uma sessão com o gitolite
 +<sxh bash>
 +
 +su - gitolite
 +</​sxh>​
 +
 +Vamos acertar as variáveis do nosso git
 +<sxh bash>
 +
 +git config --global user.name "​Douglas Quintiliano dos Santos"​
 +git config --global user.email douglas@douglasqsantos.com.br
 +git config --global color.status auto
 +git config --global color.branch auto
 +</​sxh>​
 +
 +Agora vamos carregar a chave que criamos no cliente para o gitolite
 +<sxh bash>
 +
 +gl-setup /​tmp/​douglas.pub ​
 +creating gitolite-admin...
 +Initialized empty Git repository in /​home/​gitolite/​repositories/​gitolite-admin.git/​
 +creating testing...
 +Initialized empty Git repository in /​home/​gitolite/​repositories/​testing.git/​
 +[master (root-commit) d5ac570] start
 + 2 files changed, 6 insertions(+),​ 0 deletions(-)
 + ​create mode 100644 conf/​gitolite.conf
 + ​create mode 100644 keydir/​douglas.pub
 +</​sxh>​
 +
 +Como pode ser notado a chave foi carregada e foram criados dois repositórios um que administramos as configurações do gitolite e um de teste.
 +
 +Agora precisamos acertar o arquivo que controla as permissões dos repositórios.
 +<sxh bash>
 +
 +sed -i '​s/​$REPO_UMASK = 0077;/# $REPO_UMASK = 0077;/​g'​ /​home/​gitolite/​.gitolite.rc
 +sed -i 's/# $REPO_UMASK = 0027;/​$REPO_UMASK = 0027;/​g'​ /​home/​gitolite/​.gitolite.rc
 +</​sxh>​
 +
 +Agora vamos acertar as permissões de nossos repositórios
 +<sxh bash>
 +
 +chmod g+r /​home/​gitolite/​projects.list
 +chmod -R g+rx /​home/​gitolite/​repositories
 +</​sxh>​
 +
 +Agora vamos sair da sessão do gitolite
 +<sxh bash>
 +
 +exit
 +</​sxh>​
 +
 +Vamos criar o diretório e acessar o diretório para armazenarmos os repositórios no cliente
 +<sxh bash>
 +
 +mkdir -p /​home/​douglas/​repositorios
 +cd /​home/​douglas/​repositorios
 +</​sxh>​
 +
 +Agora na maquina cliente vamos clonar o reposiorio de administração
 +<sxh bash>
 +
 +git clone gitolite@10.101.0.11:​gitolite-admin.git
 +Cloning into gitolite-admin...
 +remote: Counting objects: 6, done.
 +remote: Compressing objects: 100% (4/4), done.
 +Receiving objects: 100% (6/6), 754 bytes, done.
 +remote: Total 6 (delta 0), reused 0 (delta 0)
 +</​sxh>​
 +
 +Ainda no cliente vamos efetuar algumas configurações no repositório de adm, deixe o arquivo como abaixo.
 +
 +<sxh bash>
 +
 +vim gitolite-admin/​conf/​gitolite.conf
 +[...]
 +     ​repo ​   gitolite-admin
 +
 +repo    testing
 +      RW+     ​= ​  @all
 +      R       ​= ​  ​daemon
 +testing "​Owner"​ = "​Repositório Teste"
 +</​sxh>​
 +
 +Precisamos efetuar essa alteração para que o gitweb possa ler o repositório ;)
 +
 +Agora vamos acessar o nosso repositório para adicionarmos as novas configurações do repositório
 +<sxh bash>
 +
 +cd /​home/​douglas/​repositorios/​gitolite-admin/​
 +</​sxh>​
 +
 +Agora vamos adicionar o nosso arquivo para ser enviado ao repositório
 +<sxh bash>
 +
 +git add conf/​gitolite.conf
 +</​sxh>​
 +
 +Agora vamos confirmar a nossa atualização.
 +<sxh bash>
 +
 +git commit -m "​Alterando configuração para gitweb e git-daemon"​
 +[master ee806c1] Alterando configuração para gitweb e git-daemon
 + 1 files changed, 2 insertions(+),​ 0 deletions(-)
 +</​sxh>​
 +
 +Agora vamos enviar a alteração para o repositório
 +<sxh bash>
 +
 +git push
 +Counting objects: 7, done.
 +Delta compression using up to 4 threads.
 +Compressing objects: 100% (3/3), done.
 +Writing objects: 100% (4/4), 461 bytes, done.
 +Total 4 (delta 0), reused 0 (delta 0)
 +remote: Already on '​master'​
 +To gitolite@10.101.0.11:​gitolite-admin.git
 +   ​8be6892..ee806c1 ​ master -> master
 +</​sxh>​
 +
 +Agora vamos voltar um diretório para obtermos uma cópia do repositório de teste
 +<sxh bash>
 +
 +cd ..
 +</​sxh>​
 +
 +Agora vamos clonar o repositório testing.git no cliente
 +<sxh bash>
 +
 +git clone gitolite@10.101.0.11:​testing.git
 +Cloning into testing...
 +warning: You appear to have cloned an empty repository.
 +</​sxh>​
 +
 +Agora vamos acesar o nosso repositório e criar um arquivo de teste
 +<sxh bash>
 +
 +cd testing
 +echo "​README"​ > README
 +</​sxh>​
 +
 +Agora vamos marcar esse arquivo para ser enviado ao repositório
 +<sxh bash>
 +
 +git add README
 +</​sxh>​
 +
 +Agora vamos confirmar a nossa atualização.
 +<sxh bash>
 +
 +git commit -m "​Adicionando README"​
 +[master (root-commit) d8dcf6b] Added README
 + 1 files changed, 1 insertions(+),​ 0 deletions(-)
 + ​create mode 100644 README
 +</​sxh>​
 +
 +Agora vamos enviar para o servidor
 +<sxh bash>
 +
 +git push origin master
 +Counting objects: 3, done.
 +Writing objects: 100% (3/3), 236 bytes, done.
 +Total 3 (delta 0), reused 0 (delta 0)
 +To gitolite@10.101.0.11:​testing.git
 + * [new branch] ​     master -> master
 +</​sxh>​
 +
 +Agora vamos instalar o gitweb no servidor ;)
 +<sxh bash>
 +
 +aptitude install highlight gitweb apache2 -y
 +</​sxh>​
 +
 +Agora precisamos fazer alguns acertos sobre a localização dos repositórios no servidor para que o gitweb possa mapeá-los
 +<sxh bash>
 +
 +sed -i '​s,​$projectroot = "/​var/​cache/​git";,​$projectroot = "/​home/​gitolite/​repositories";,​g'​ /​etc/​gitweb.conf
 +sed -i '​s,​$projects_list = $projectroot;,​$projects_list = "/​home/​gitolite/​projects.list";,​g'​ /​etc/​gitweb.conf
 +</​sxh>​
 +
 +Agora já podemos acessar os nossos repositórios em http://​10.101.0.11/​gitweb
 +
 +Agora vamos configurar o git-daemon
 +
 +<sxh bash>
 +
 +aptitude install git-daemon-run -y
 +</​sxh>​
 +
 +Vamos fazer um backup do arquivo do daemon
 +<sxh bash>
 +
 +cp -Rfa /​etc/​sv/​git-daemon/​run{,​.bkp}
 +</​sxh>​
 +
 +Agora vamos acertar o script de inicilização pois os repositório não estão no local padrão, deixe o arquivo como abaixo.
 +<sxh bash>
 +
 +vim /​etc/​sv/​git-daemon/​run
 +#!/bin/sh
 +exec 2>&1
 +echo '​git-daemon starting.'​
 +exec chpst -ugitdaemon:​gitolite \
 +  "$(git --exec-path)"/​git-daemon --verbose --base-path=/​home/​gitolite/​repositories /​home/​gitolite/​repositories
 +</​sxh>​
 +
 +Agora vamos inicializar o daemon
 +<sxh bash>
 +
 +sv restart git-daemon
 +ok: run: git-daemon: (pid 2810) 0s
 +</​sxh>​
 +
 +Agora já podemos utilizar o repositório via git, no cliente vamos fazer um teste.
 +<sxh bash>
 +
 +git clone git://​10.101.0.11/​testing.git
 +Cloning into testing...
 +remote: Counting objects: 3, done.
 +remote: Total 3 (delta 0), reused 0 (delta 0)
 +Receiving objects: 100% (3/3), done.
 +</​sxh>​
 +
 +Agora vamos ajustar as urls do gitweb, quando acessamos por exemplo o READ acessamos ​ http://​10.101.0.11/​gitweb/​testing.git?​a=blob_plain;​f=gitweb/​README vamos ajustar para que ele tenha as urls mais simples ;)
 +
 +Vamos comentar as linhas do gitweb no servidor.
 +<sxh bash>
 +
 +vim /​etc/​apache2/​conf.d/​gitweb
 +#Alias /gitweb /​usr/​share/​gitweb
 +#
 +#<​Directory /​usr/​share/​gitweb>​
 +#  Options FollowSymLinks +ExecCGI
 +#  AddHandler cgi-script .cgi
 +#</​Directory>​
 +</​sxh>​
 +
 +Agora vamos criar um virtual host para o nosso git
 +<sxh apache>
 +
 +vim /​etc/​apache2/​sites-available/​gitweb
 +<​VirtualHost *:80>
 +    ServerName gitweb.douglasqsantos.com.br
 +    ServerAdmin webmaster@douglasqsantos.com.br
 +    DocumentRoot /​usr/​share/​gitweb
 +
 +    <​Directory /​usr/​share/​gitweb>​
 +        Options FollowSymLinks ExecCGI
 +        AddHandler cgi-script cgi
 +        RewriteEngine On
 +        RewriteCond %{REQUEST_FILENAME} -f
 +        RewriteCond %{REQUEST_FILENAME} -d
 +        RewriteRule ^.* /​index.cgi/​$0 [L,PT]
 +    </​Directory>​
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Agora vamos carregar o nosso virtualhost,​ e desabilitar o virtual host default
 +<sxh bash>
 +
 +a2ensite gitweb
 +a2dissite default
 +</​sxh>​
 +
 +Agora precisamos adicionar algumas linhas no final do arquivo /​etc/​gitweb.conf
 +<sxh bash>
 +
 +vim /​etc/​gitweb.conf
 +[...]
 +#Adicione no final do arquivo
 +$feature{'​pathinfo'​}{'​default'​} = [1];
 +$projects_list_description_width = 100;
 +$feature{'​blame'​}{'​default'​} = [1];
 +$feature{'​blame'​}{'​override'​} = 1;
 +
 +$feature{'​pickaxe'​}{'​default'​} = [1];
 +$feature{'​pickaxe'​}{'​override'​} = 1;
 +
 +$feature{'​snapshot'​}{'​default'​} = [1];
 +$feature{'​snapshot'​}{'​override'​} = 1;
 +
 +$feature{'​search'​}{'​default'​} = [1];
 +
 +$feature{'​grep'​}{'​default'​} = [1];
 +$feature{'​grep'​}{'​override'​} = 1;
 +
 +$feature{'​show-sizes'​}{'​default'​} = [1];
 +$feature{'​show-sizes'​}{'​override'​} = 1;
 +
 +$feature{'​avatar'​}{'​default'​} = ['​gravatar'​];​
 +$feature{'​avatar'​}{'​override'​} = 1;
 +
 +$feature{'​highlight'​}{'​default'​} = [1];
 +$feature{'​highlight'​}{'​override'​} = 1;
 +</​sxh>​
 +
 +Eu achei um tema bem bacana para o gitweb, vou mostar como instalar ele. 
 +
 +Vamos fazer backup de alguns arquivos do gitweb
 +<sxh bash>
 +
 +cd /​usr/​share/​gitweb
 +mv gitweb.js gitweb.js.old
 +mv gitweb.css gitweb.css.old
 +</​sxh>​
 +
 +Agora vamos obter o tema
 +<sxh bash>
 +
 +cd /tmp
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​versionamento/​gitweb-tema.tar.gz
 +</​sxh>​
 +
 +Agora vamos desempacotar ele e copiar os arquivos para o diretório do gitweb
 +<sxh bash>
 +
 +tar -xzvf gitweb-tema.tar.gz
 +</​sxh>​
 +
 +Agora vamos copiar os arquivos para o diretório do gitweb
 +<sxh bash>
 +
 +cp gitweb.css gitweb.js /​usr/​share/​gitweb/​
 +</​sxh>​
 +
 +Vamos carregar o modulo rewrite
 +<sxh bash>
 +
 +a2enmod rewrite
 +</​sxh>​
 +
 +Agora vamos reiniciar o apache
 +<sxh bash>
 +
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +Caso tenha acesso ao servidor dns insira um registro do tipo A e direcione para 10.101.0.11,​ caso não tenha insira uma entrada no /etc/hosts 10.101.0.11 gitweb.douglasqsantos.com.br que já vai ser possivel acessar ;)
 +
 +Agora é so acessar http://​gitweb.douglasqsantos.com.br
 +
 +Agora vamos instalar o gitstats ele pode ser instalado no cliente mesmo, pois precisamos do clone do repositório para gerar as statistias ;)
 +<sxh bash>
 +
 +aptitude install gitstats -y
 +</​sxh>​
 +
 +Para gerar o relatório precisamos de um clone, eu vou clonar o repositório teste no /​srv/​repositorios do servidor, como esse diretório ainda não existe vou criar ele e acessar ele
 +<sxh bash>
 +
 +mkdir -p /​srv/​repositorios
 +cd /​srv/​repositorios
 +</​sxh>​
 +
 +Agora vamos clonar o repositório testing para gerarmos statisticas
 +<sxh bash>
 +
 +git clone git://​10.101.0.11/​testing.git
 +Cloning into testing...
 +remote: Counting objects: 3, done.
 +Receiving objects: 100% (3/3), 235 bytes, done.
 +remote: Total 3 (delta 0), reused 0 (delta 0)
 +</​sxh>​
 +
 +Agora vamos criar um virtual host para as nossas statisticas
 +<sxh apache>
 +
 +vim /​etc/​apache2/​sites-available/​gitstats
 +<​VirtualHost *:80>
 +        ServerName gitstats.douglasqsantos.com.br
 +        ServerAdmin webmaster@localhost
 +
 +        DocumentRoot /​var/​www/​gitstats
 +        <​Directory />
 +                Options FollowSymLinks
 +                AllowOverride None
 +        </​Directory>​
 +        <​Directory /​var/​www/​gitstats>​
 +                Options Indexes FollowSymLinks MultiViews
 +                AllowOverride None
 +                Order allow,deny
 +                allow from all
 +        </​Directory>​
 +        ErrorLog ${APACHE_LOG_DIR}/​error.log
 +        LogLevel warn        ​
 +        CustomLog ${APACHE_LOG_DIR}/​access.log combined
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Agora vamos habilitar o nosso virtual host
 +<sxh bash>
 +
 +a2ensite gitstats
 +</​sxh>​
 +
 +Vamos remover o index.html do site default do apache
 +<sxh bash>
 +
 +rm -rf /​var/​www/​index.html
 +</​sxh>​
 +
 +Agora vamos gerar as statisticas do repositório testing
 +<sxh bash>
 +
 +gitstats /​srv/​repositorios/​testing/​ /​var/​www/​gitstats/​testing
 +</​sxh>​
 +
 +Agora vamos reiniciar o apache
 +<sxh bash>
 +
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +Caso tenha acesso ao servidor dns insira um registro do tipo A e direcione para 10.101.0.11,​ caso não tenha insira uma entrada no /etc/hosts 10.101.0.11 gitstats.douglasqsantos.com.br que já vai ser possivel acessar ;)
 +
 +Agora é so acessar http://​gitstats.douglasqsantos.com.br/​testing
 +
 +Agora vamos ver como adicionamos um novo repositório
 +
 +No cliente vamos acessar o repositório de administração do git
 +<sxh bash>
 +
 +cd ~/​repositorios/​gitolite-admin/​
 +</​sxh>​
 +
 +Agora vamos acrescentar algumas linhas a respeito de nosso novo repositório,​ vou criar um repositório com o nome de php
 +<sxh bash>
 +
 +vim conf/​gitolite.conf
 +        repo    gitolite-admin
 +                RW+     ​= ​  ​douglas
 +
 +        repo    php
 +                RW+     ​= ​ douglas
 +                R       ​= ​  ​daemon
 +php "​Owner" ​    = "​Repositório php"
 +
 +
 +        repo    testing
 +                RW+     ​= ​  @all
 +                R       ​= ​  ​daemon
 +testing "​Owner"​ = "​Repositório Teste"
 +</​sxh>​
 +
 +Agora vamos marcar ele para ser enviado ao servidor.
 +<sxh bash>
 +
 +git add conf/​gitolite.conf
 +</​sxh>​
 +
 +Agora vamos configurar que vamos enviar ele para o repositório ​
 +<sxh bash>
 +
 +git commit -m "​Criação do repositório php"
 +</​sxh>​
 +
 +Agora vamos enviar o arquivo para o servidor git
 +<sxh bash>
 +
 +git push
 +Counting objects: 7, done.
 +Delta compression using up to 6 threads.
 +Compressing objects: 100% (3/3), done.
 +Writing objects: 100% (4/4), 439 bytes, done.
 +Total 4 (delta 1), reused 0 (delta 0)
 +remote: Already on '​master'​
 +remote: creating php...
 +remote: Initialized empty Git repository in /​home/​gitolite/​repositories/​php.git/​
 +To gitolite@10.101.0.11:​gitolite-admin.git
 +   ​e9922e3..edfc1e1 ​ master -> master
 +</​sxh>​
 +
 +Agora no servidor precisamos reiniciar o daemon do git
 +<sxh bash>
 +
 +sv restart git-daemon
 +</​sxh>​
 +Como pode ser notado o gitolite já criou e iniciou o nosso repositório.
 +
 +Agora vamos clonar ele na ainda na maquina cliente
 +
 +Vamos acessar a raiz dos repositórios
 +<sxh bash>
 +
 +cd ~/​repositorios/​
 +</​sxh>​
 +
 +Agora vamos clonar o nosso repositório
 +<sxh bash>
 +
 +git clone gitolite@10.101.0.11:​php.git
 +Cloning into php...
 +warning: You appear to have cloned an empty repository.
 +</​sxh>​
 +
 +Agora vamos criar um arquivo de teste em nosso repositório
 +<sxh bash>
 +
 +cd php
 +echo "<?​php phpinfo(); ?>" > phpinfo.php
 +</​sxh>​
 +
 +Agora vamos adicionar ele para ser enviado ao repositório
 +<sxh bash>
 +
 +git add phpinfo.php ​
 +</​sxh>​
 +
 +Agora vamos confirmar que o arquivo deve ser enviado ao repositório
 +<sxh bash>
 +
 +git commit -m "​Adicionando phpinfo.php"​
 +[master (root-commit) 345e9ad] Adicionando phpinfo.php
 + 1 files changed, 1 insertions(+),​ 0 deletions(-)
 + ​create mode 100644 phpinfo.php
 +</​sxh>​
 +
 +Agora vamos enviar para o repositório
 +<sxh bash>
 +
 +git push origin master
 +Counting objects: 3, done.
 +Writing objects: 100% (3/3), 256 bytes, done.
 +Total 3 (delta 0), reused 0 (delta 0)
 +To gitolite@192.168.1.10:​php.git
 + * [new branch] ​     master -> master
 +</​sxh>​
 +
 +O nosso repositório já pode ser consultado em http://​gitweb.douglasqsantos.com.br
 +
 +Agora vamos clonar o nosso repositório php no servidor para gerarmos as estatísticas ​
 +<sxh bash>
 +
 +git clone git://​10.101.10.11/​php.git /​srv/​repositorios/​php
 +</​sxh>​
 +
 +Agora vamos gerar as estatísticas do nosso novo repositório
 +<sxh bash>
 +
 +gitstats /​srv/​repositorios/​php/​ /​var/​www/​gitstats/​php
 +</​sxh>​
 +
 +Agora podemos acessar os relatórios em http://​gitstats.douglasqsantos.com.br/​php
 +
 +Agora vamos ver como adicionamos mais usuários para acesso ao repositório
 +
 +Vamos gerar a chave rsa
 +<sxh bash>
 +
 +ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​home/​douglas/​.ssh/​id_rsa): ​
 +Created directory '/​home/​douglas/​.ssh'​.
 +Enter passphrase (empty for no passphrase): ​
 +Enter same passphrase again: ​
 +Your identification has been saved in /​home/​douglas/​.ssh/​id_rsa.
 +Your public key has been saved in /​home/​douglas/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +e0:​0c:​df:​8e:​9e:​f6:​fb:​70:​21:​26:​37:​d9:​71:​57:​a7:​1d douglas@debian
 +The key's randomart image is:
 ++--[ RSA 2048]----+
 +|               Eo|
 +|               +o|
 +|    . .   . . o .|
 +|     = o o o .   |
 +|      = S o      |
 +|       * o .     |
 +|      . o .      |
 +|     ... o       |
 +|     ​.o.oo. ​     |
 ++-----------------+
 +</​sxh>​
 +
 +Agora vamos copiar para o cliente que tem os repositório adm
 +<sxh bash>
 +
 +scp /​home/​douglas/​.ssh/​id_rsa.pub 10.101.0.1:/​tmp/​douglas.debian.pub
 +</​sxh>​
 +
 +Agora no cliente que tem os repositórios vamos copiar a chave do tmp para ~/​repositorios/​gitolite-admin/​keydir
 +<sxh bash>
 +
 +cp /​tmp/​douglas.debian.pub ~/​repositorios/​gitolite-admin/​keydir/​
 +</​sxh>​
 +
 +Agora vamos marcar a chave para ser enviada para o repositório
 +<sxh bash>
 +
 +cd ~/​repositorios/​gitolite-admin
 +git add keydir/​douglas.debian.pub
 +</​sxh>​
 +
 +Agora vamos confirmar a chave que vai ser enviada para o repositório
 +<sxh bash>
 +
 +git commit -m "​Adicionando chave"
 +[master 9ef830c] Adicionando chave
 + 1 files changed, 1 insertions(+),​ 0 deletions(-)
 + ​create mode 100644 keydir/​douglas.debian.pub
 +</​sxh>​
 +
 +Agora vamos enviar a chave para o repositório
 +<sxh bash>
 +
 +git push
 +Counting objects: 6, done.
 +Delta compression using up to 6 threads.
 +Compressing objects: 100% (4/4), done.
 +Writing objects: 100% (4/4), 700 bytes, done.
 +Total 4 (delta 0), reused 0 (delta 0)
 +remote: Already on '​master'​
 +remote: ​
 +remote: ​    ''''''​* WARNING ''''''​*
 +remote: ​        the following users (pubkey files in parens) do not appear in the config file:
 +remote: douglas.debian(douglas.debian.pub)
 +To gitolite@192.168.1.10:​gitolite-admin.git
 +   ​195249c..9ef830c ​ master -> master
 +</​sxh>​
 +
 +Note que apareceu uma mensagem avisando que o douglas.debian não está em nenhum repositório,​ ele não tem configuração no gitolite.conf,​ vamos adicionar ele no repositório php.
 +
 +<sxh bash>
 +
 +vim conf/​gitolite.conf ​
 +        repo    gitolite-admin
 +                RW+     ​= ​  ​douglas
 +
 +        repo    php
 +                RW+     ​= ​ douglas
 +                RW      =  douglas.debian
 +                R       ​= ​  ​daemon
 +
 +
 +php "​Owner" ​    = "​Repositório php"
 +
 +        repo    testing
 +                RW+     ​= ​  @all
 +                R       ​= ​  ​daemon
 +testing "​Owner"​ = "​Repositório Teste"
 +</​sxh>​
 +
 +Agora vamos marcar o arquivo para ser enviado ao repositório
 +<sxh bash>
 +
 +git add conf/​gitolite.conf
 +</​sxh>​
 +
 +Agora vamos configurar ele no repositório
 +<sxh bash>
 +
 +git commit -m "​Adicionando usuario ao repositorio php"
 +[master 97a8c24] Adicionando usuario ao repositorio php
 + 1 files changed, 2 insertions(+),​ 0 deletions(-)
 +</​sxh>​
 +
 +Agora vamos enviar para o repositório
 +<sxh bash>
 +
 +git push
 +Counting objects: 7, done.
 +Delta compression using up to 6 threads.
 +Compressing objects: 100% (3/3), done.
 +Writing objects: 100% (4/4), 407 bytes, done.
 +Total 4 (delta 1), reused 0 (delta 0)
 +remote: Already on '​master'​
 +To gitolite@10.101.0.11:​gitolite-admin.git
 +   ​9ef830c..97a8c24 ​ master -> master
 +</​sxh>​
 +
 +Agora com o novo cliente que importamos a chave vamos criar o diretório de repositórios e vamos clonar o repositório php que o cliente tem acesso.
 +
 +<sxh bash>
 +
 +mkdir ~/​repositorios
 +cd ~/​repositorios
 +</​sxh>​
 +
 +Agora vamos clonar
 +<sxh bash>
 +
 +git clone gitolite@10.101.0.11:​php.git
 +Cloning into php...
 +The authenticity of host '​192.168.1.10 (192.168.1.10)'​ can't be established.
 +RSA key fingerprint is 34:​64:​a3:​f5:​8f:​ca:​2d:​30:​aa:​df:​f8:​84:​38:​2f:​e2:​3d.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '​192.168.1.10'​ (RSA) to the list of known hosts.
 +remote: Counting objects: 3, done.
 +Receiving objects: 100% (3/3), 255 bytes, done.
 +remote: Total 3 (delta 0), reused 0 (delta 0)
 +</​sxh>​
 +
 +Vamos acertar as variáveis do nosso git
 +<sxh bash>
 +
 +git config --global user.name "​Douglas Debian"​
 +git config --global user.email douglas@douglasqsantos.com.br
 +git config --global color.status auto
 +git config --global color.branch auto
 +</​sxh>​
 +
 +Agora vamos acessar o repositório e vamos enviar um arquivo de teste
 +<sxh bash>
 +
 +cd php
 +echo "<?​php echo '​Douglas';​ ?>" > douglas.php
 +</​sxh>​
 +
 +Agora vamos marcar o pacote para ser enviado para o repositório
 +<sxh bash>
 +
 +git add douglas.php
 +</​sxh>​
 +
 +Agora vamos confirmar que os arquivos devem ser enviados para o repositório
 +<sxh bash>
 +
 + git commit -m "Teste de permissão"​
 +[master e635eb8] Teste de permissão
 + 1 files changed, 1 insertions(+),​ 0 deletions(-)
 + ​create mode 100644 douglas.php
 +</​sxh>​
 +
 +Agora vamos enviar para o repositório
 +<sxh bash>
 +
 +git push
 +Counting objects: 4, done.
 +Compressing objects: 100% (2/2), done.
 +Writing objects: 100% (3/3), 316 bytes, done.
 +Total 3 (delta 0), reused 0 (delta 0)
 +To gitolite@192.168.1.10:​php.git
 +   ​345e9ad..e635eb8 ​ master -> master
 +</​sxh>​
 +
 +Agora podemos acessar http://​gitweb.douglasqsantos.com.br para visualizar os arquivos ;)
 +
 +
 +Agora no primeiro cliente vamos atualizar os arquivos que foram enviados para o repositório
 +
 +====== Referências ======
 +
 +  - http://​pt.wikipedia.org/​wiki/​Git
 +  - http://​git-scm.com/​
 +  - http://​kogakure.github.com/​gitweb-theme/​
 +  - http://​git-scm.com/​documentation
 +  - http://​git-scm.com/​downloads
 +  - http://​git-scm.com/​about
 +  - http://​git-scm.com/​community
 +  - http://​git-scm.com/​book
 +  - http://​git.or.cz/​course/​svn.html
 +  - http://​djalmafilho.blogspot.com.br/​2008/​06/​tutorial-git-atualizado.html
 +  - http://​codexico.com.br/​blog/​linux/​tutorial-simples-como-usar-o-git-e-o-github/​
 +  - http://​codexico.com.br/​blog/​linux/​tutorial-simples-parte-2-git-branch-e-merge/​
 +  - http://​ferrari.eti.br/​trabalhando-em-grupo-em-um-mesmo-branch-no-gi/​