Este é primeiro artigo de uma série que irei escrever falando sobre o Git que, na minha opinião, é uma das melhores ferramentas de SCM disponíveis no mercado. Posteriormente falarei um pouco sobre o histórico do Git, porém no momento vou me concentrar em como configurar um servidor para servir de repositório central para todos os seus repositórios Git. Apesar de ser um DCVS, ter um repositório centralizado oferece diversas facilidades como, por exemplo, um referência de onde todos os desenvolvedores podem atualizar seus repositórios locais.
Existem bons serviços disponíveis na web para armazenar repositórios Git como, por exemplo, o GitHub e o Assembla, sendo que este último é um portal de gerenciamento de projetos que oferece também o serviço de armazenamento de repositórios. Porém, devido aos mais variados motivos, pode ser conveniente ou necessário que os nossos repositórios sejam armazenados num servidor próprio, seja local ou nas nuvens. Assim sendo, vou mostrar neste tutorial como instalar e configurar o Gitosis, que é uma ferramenta para armazenar repositórios Git, numa máquina rodando Ubuntu.
Instalando o Gitosis
Antes de iniciar, é sempre bom atualizarmos nossos repositórios do Ubuntu:
Feito isso, vamos criar um diretório onde vamos clonar o Gitosis:
Tudo pronto pra clonagem (lembrei de alguns filmes de ficção científica e da novela "O Clone" :D ):
Instalando o Gitosis
Antes de iniciar, é sempre bom atualizarmos nossos repositórios do Ubuntu:
sudo apt-get update
Feito isso, vamos criar um diretório onde vamos clonar o Gitosis:
cd ~
mkdir src
cd src
Tudo pronto pra clonagem (lembrei de alguns filmes de ficção científica e da novela "O Clone" :D ):
git clone git://eagain.net/gitosis.git
Se aparecer uma mensagem de erro, falando que o git não está instalado, você pode instala-lo da seguinte maneira:
sudo apt-get install git-core
Após finalizar o clone, vai ser criado dentro de ~/src um diretório gitosis. Para prosseguir com a instalação:
cd gitosis
sudo python setup.py install
Normalmente você não terá problemas com o Python, pois o mesmo já vem instalado por padrão, mas pode ocorrer um erro relacionado ao setuptools, que é uma biblioteca python usada em scripts de instalação. Para resolver este problema:
sudo apt-get install python-setuptools
Feito isso, o Gitosis estará instalado. Passamos, então, à fase de configuração.
Configurando o Gitosis
A primeira coisa a fazermos é criar o usuário sob o qual rodará o Gitosis:
sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
No comando acima estamos criando um usuario chamado git, que não precisa ter senha (--disable-password), porém precisa de um shell válido (--shell /bin/sh). O diretório home (--home /home/git) foi definindo seguindo o padrão linux, porém poderia ser configurado para qualquer outra pasta; neste diretório serão armazenados os repositórios Git.
Agora precisamos gerar uma chave RSA de acesso, visto que o Git roda sobre SSH:
ssh-keygen -t rsa
Vamos, então, iniciar o nosso repositório de configuração do Gitosis:sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub
Isso já vai incluir a chave do nosso servidor na lista de permissões do Gitosis. Se tudo der certo, aparecerá duas vezes uma mensagem falando que o repositório foi inicializado.
Por segurança, devemos garantir que o hook de post-update do repostório de configuração está com permissão de execução:
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
Agora vamos clonar o repositório de configuração do Gitosis:
cd ~
git clone git@localhost:gitosis-admin.git
Se ocorrer um erro de connection refused na porta 22, é preciso instalar o OpenSSH-Server (lembra-se que o Git roda sobre SSH??):
sudo apt-get install openssh-server
Quando ele perguntar se você deseja adicionar a chave do servidor na lista de hosts conhecidos, responda yes.
OK, agora dentro de ~ temos o diretório gitosis-admin e dentro dele temos os seguintes itens:
- Arquivo gitosis.conf => Onde configuramos os repositórios disponíveis e o acesso dos usuários a eles;
- Diretório keydir => Onde devem ser armazenadas as chaves RSA dos usuários que poderão acessar os repositórios do servidor.
Como o diretório gitosis-admin é um repositório Git, todas as alteração feitas nele deverão ser comitadas (git commit) e enviadas para o repositório central (git push).
Criando novos repositórios
Para começar, abra o arquivo gitosis.conf. Ele deve parecer da seguinte forma:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = usuario@nome_ubuntu
Onde temos o nome do grupo entre [], o nome dos projetos com permissão de escrita (writeable) e o usuário que possui esta permissão. Para adicionar um novo projeto, podemos adicionar as seguintes linhas:
[group equipe]
writable = projeto1 projeto2 projeto3
readonly = projeto4
members = usuario1@maquina1 usuario2@maquina2
No exemplo acima, estamos dando permissão de escrita para os projetos 1, 2 e 3 e acesso somente leitura (readonly) ao projeto4 para os usuários usuario1@maquina1 e usuario2@maquina2. Esses nomes de usuario vem do arquivo id_rsa.pub que é gerado em cada máquina:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAniABr9ynN57KK0ScYDM0lM3h9KBRpa7b
FBIM1aoX2slOKbj4gSdFk2P29tmFb505lly+xsXXCJ//iHheLgpRUcIPG+fLUXYiOhT6
+dv3ERlrhHQ0XmByayMafWyKvsQw6HYjfPNbt4RUnKSLuERSuQsiORCrT0j34lg2ASMk
0+QLOl6HRI1+4GQHXnLydMVbV1dvHeCf1hHfRMcjk5dAmb8m+EW7JJuNjnCby4psEFpG
70ff1T8l8JL1bUwcECfoEQ7GtpjeOTdGCW14D0cb36uXRWvU03kBLJFBbGn7Wuu4VPFz
t2ACPfim8fe9LWGguVVcEKjFonxXJs9BJsMecQ== usuario1@maquina1
Após serem gerados nas máquinas, os arquivos id_rsa.pub devem ser copiados para a pasta ~/gitosis-admin/keydir e renomeados de acordo com o nome do usuário. Seguindo o exemplo acima, teriamos 2 arquivos dentro do diretório keydir chamados usuario1@maquina1.pub e usuario2@maquina2.pub .
Após feitas estas configurações, como já foi dito anteriormente, devemos comitar as alterações e enviar para o repositório central:
cd ~/gitosis-admin
git add keydir
git add gitosis.conf
git commit -m "Adicionados novos projetos e usuarios"
git push
Feito isso, as configurações já estão valendo no servidor e os usuários que tiverem acesso já podem clonar os repositórios normalmente.
Um comentário:
Wevertooooon, qual a principal diferença entre o GIT e outros gerenciadores de arquivos como por exemplo o SVN e o CVS?
Postar um comentário