Bem, hoje falarei sobre o GIT. Há muitos anos tenho trabalhado com o SUBVERSION e suas ferramentas administrativas tais como o Tortoise, mas desde que resolvi tratar de forma mais seria meu repositório, tal como, controle de branches, tags, manter o versionamento de meus softwares em dia, vi que o modelo CVS não me atenderia muito bem, tendo inclusive algumas decepções (Subversion com merge é terrivel).
Como um bom desenvolverdor, sempre que nos deparamos com um problema qual a primeira atitude a se tomar? Resolvê-lo. Em minhas pesquisas verifiquei que o Git (um sistema de controle de versão distribuído) já vinha sendo utilizado por várias pessoas e empresas e resolvi analisa-la um pouco mais de perto. Entre os vários artigos que li um que recomendo é o do Imasters que da uma ideia comparativa entre GIT e Subversion (leia aqui ou nas referências ao fim do texto).
Uma vez entendido o que é e como funciona sistemas distribuidos vamos ver com funciona na pratica. Você, antes de mais nada pode criar um projeto publico no github (eles possuem uma excelente documentação) ou mesmo em sua máquina local.
Nossa instalação será do git version 1.7 no Ubuntu 11.10. O acesso ao git será via WebDAV ou gitweb.
Instalação do Servidor Git
Estou considerando que você já tenha uma versão do apache instalada em sua máquina. Bem, temos que habilitar o módulo dav em nosso servidor. Para isso vamos criar um link simbólico para esses módulos:
ln -s /etc/apache2/mods-available/dav.load /etc/apache2/mods-enable/dav.load
ln -s /etc/apache2/mods-available/dav_fs.load /etc/apache2/mods-enable/dav_fs.load
Configuração do WebDAV
Criar e editar o arquivo de configuracao git:
touch /etc/apache2/conf.d/git
nano /etc/apache2/conf.d/git
Uma vez criado adicione as seguintes linhas:
<Directory "/var/www/git">
DAV on
Options +Indexes +FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Private Git Access"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</Directory>
Agora temos que criar um arquivo de senhas para a autenticação do tipo Basic:
htpasswd -c /etc/apache2/passwd.git usuario
Feito isso, criaremos o diretório dos repositórios para testar a autenticação:
mkdir /var/www/git
Reiniciar o Apache e testar o endereço http://localhost/git:
service apache2 restart
Instalação e Configuração do GIT
Instale o git em sua máquina:
apt-get install git
Agora vamos criar um repositório de teste:
mkdir -p /var/www/git/meurepo
cd /var/www/git/meurepo
git --bare init
Initialized empty Git repository in /var/www/git/meurepo/
Teremos que habilitar o hook de post-update para garantir que o nosso recem criado repositório fique sempre atualizado:
cd /var/www/git/meurepo
cp hooks/post-update.sample hooks/post-update
chmod +x hooks/post-update
O conteúdo do hooks/post-update deve ser:
cat hooks/post-update
exec git update-server-info
Executaremos manualmente o hook na primeira vez:
./hooks/post-update
No Ubuntu o usuário Apache é www-data. Vamos dar permissão à ele em nosso diretório:
chown -R www-data:www-data /var/www/git/meurepo
Reinicie o servidor apache:
service apache2 restart
Instalação e Configuração do gitweb
O Gitweb é a interface web padrão fornecido pelo git e é base para outros scripts tais como cgit, gitosis entre outros. Para instalarmos o gitweb no Server, podemos executar :
apt-get install gitweb
Criar e editar o arquivo gitweb.conf para o Apache:
touch /etc/apache2/conf.d/gitweb
nano /etc/apache2/conf.d/gitweb
Adicione o codigo no arquivo:
Alias /gitweb /var/www/git
<Directory /var/www/git>
Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
Criar arquivo de configuração do gitweb:
cat /etc/gitweb.conf
$projectroot = '/var/www/git/';
@git_base_url_list = ('http://localhost/git')
Reiniciar o Apache e testar o endereço http://localhost/gitweb:
/etc/init.d/httpd restart
Instalação do Cliente Git
No cliente, pode se a mesma máquina ou outra remota, temos que instalar novamente o git .
apt-get install git
Configuracao mínima do nosso git:
git config --global user.name "My Name"
git config --global user.email "my@email.com"
Configuraremos um usuário e senha para acessar ao servidor git:
nano ~/.netrc
Adicione no arquivo:
machine localhost
login usuario
password senha
Nota para usuários windows
Neste caso é necessário abri seu iniciar > executar e rodar o cmd, dentro dele digite o seguinte comando:
setx HOME %USERPROFILE%
onde %USERPROFILE% é o diretório do seu usuário 'C:/Users/nomedousuario'. Uma vez feito isso, crie um arquivo neste diretório chamado _netrc (uma vez que o Windows não aceita .netrc) e a adicione o mesmo conteúdo usado acima.
Podemos testar o acesso ao servidor via curl:
curl --netrc --location -v http://localhost/git
Clonar o repositório remoto:
git clone http://localhost/git/meurepo
Cloning into meurepo...
warning: You appear to have cloned an empty repository.
Vamos agora adicionar alguma coisa ao nosso repositório:
cd meurepo
echo hellow world! > teste.txt
git add teste.txt
git commit -m 'Adicionando meu primeiro arquivo'
Enviando os arquivos para o servidor que criamos:
git push origin master
Fetching remote heads...
refs/
refs/tags/
refs/heads/
updating 'refs/heads/master'
from 0000000000000000000000000000000000000000
to 87366d467e2dfcc6057bf7d5e112b79ede984861
sending 3 objects
done
Bem, é isso galera, espero que esse post seja útil à todos. Assim que eu tiver mais novidades sobre essa maravilhosa ferramenta volto a publicar aqui. Grande abraço!
Referências:
- http://pt.wikipedia.org/wiki/Git
- http://pt.wikipedia.org/wiki/Controle_de_versão
- http://progit.org/
- http://imasters.com.br/artigo/23356/desenvolvimento/por-que-voce-deveria-mudar-do-subversion-para-git-parte-01
One more tip: to make git ignore mode changes (chmod):
ReplyDeleteJust type:
git config core.filemode false
This comment has been removed by the author.
ReplyDeleteCaso encontre esse erro:
ReplyDeleteerror: The requested URL returned error: 401 (curl_result = 22, http_code = 401, sha1 = 7811cde6f0ce2aa534511cc2822a3f52e2e61bbb)
error: Unable to find 7811cde6f0ce2aa534511cc2822a3f52e2e61bbb under http://git.server.com/projeto.com.git
Cannot obtain needed commit 7811cde6f0ce2aa534511cc2822a3f52e2e61bbb
while processing commit 4349a1f37a2f31938431871c651e48b7ff62f215.
error: Fetch failed.
Digite git gc no diretorio do projeto no servidor git para corrigi-lo.