Montando um servidor de repositórios git com gitolite

Captura de tela de 2014-05-04 22:40:23

Trabalho com git já algum tempo, porém, antes de eu entrar para a Seven Soluções em julho de 2012 não tinha passado pela experiência de usá-lo em equipe. No início para sanar apenas a necessidade de mais de uma pessoa usar o mesmo repositório remoto, criamos um diretório na minha máquina (a mesma usada como estação de desenvolvimento), e passei minha senha de usuário para os outros desenvolvedores usarem com ssh. A pior gambiarra, é a gambiarra consciente, naquele momento eu sabia que estava fazendo a coisa errada, e saí em busca de alguma solução para aquela necessidade.

Além de vários usuários para o mesmo repositório, eu precisava de algo que possibilitasse gerenciar permissões de acesso a repositórios e a branches, pois tínhamos projetos, como por exemplo,  uma espécie de cms que estava sempre em desenvolvimento e ao mesmo tempo em produção para a criação dos projetos do dia a dia, então, era preciso permissão apenas de leitura neste repositório para alguns usuários e leitura e escrita para outros.

Depois de ascender algumas velas para São Google, encontrei então o Gitolite.

Para seguir este tutorial acredito ser necessário:

  • Ter noções de git
  • Ter noções de ssh
  • Se você não usa uma distribuição linux, será mais difícil, não tenho conhecimento sobre a utilização do gitolite no windows.

Usando ssh, logue-se no servidor onde irá criar os repositórios

Captura de tela de 2014-05-04 19:53:15

Para instalar o git no ubuntu digite:

sudo apt-get install git

jackson@localhost: ~$ sudo apt-get install git

 

Agora precisamos criar um usuário no sistema que armazenará os repositórios e só permitir acesso a este usuário usando uma chave ssh pública.

Vamos criar um usuário chamado git com o seguinte comando:

sudo adduser \

–system \
–shell /bin/bash \
–gecos ‘git version control’ \
–group \
–disabled-password \
–home /home/git git

jackson@ubuntu12:~$ sudo adduser \
> --system \
> --shell /bin/bash \
> --gecos 'git version control \
> --group \
> --disabled-password \
> --home /home/git git
Adicionando usuário de sistema 'git' (UID 106) ...
Adicionando novo grupo `git' (GID 113) ...
Adicionando novo usuário `git' (UID 106) ao grupo `git' ...
chfn: name with non-ASCII characters: 'Controlador de acesso a repositórios git'
Criando diretório pessoal `/home/git' ...
jackson@ubuntu12:~$

 

Vamos aproveitar que estamos logado no servidor e baixar o gitolite de seu repositório no github.

Lembrando que acabamos de criar um usuário para que todo processo aconteça no diretório do mesmo, neste caso  /home/git. Para ficar mais fácil vamos passar para o usuário git digitando:

sudo su – git

jackson@ubuntu12:~$ sudo su - git
git@ubuntu12:~$

 

Para clonar o repositório do gitolite no servidor digite:

git clone git://github.com/sitaramc/gitolite

git@ubuntu12:~$ git clone git://github.com/sitaramc/gitolite
Cloning into 'gitolite'...
remote: Reusing existing pack: 8457, done.
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 8473 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (8473/8473), 3.55 MiB | 583 KiB/s, done.
Resolving deltas: 100% (4778/4778), done.
git@ubuntu12:~$ ls
gitolite
git@ubuntu12:~$

 

Atenção! Apenas clonamos o repositório para o servidor, ainda não o instalamos.
Vamos criar um diretório para instalá-lo:
mkdir bin

git@ubuntu12:~$ mkdir bin
git@ubuntu12:~$ ls
bin gitolite
git@ubuntu12:~$

 

Agora sim vamos instalá-lo com:
gitolite/install -to /home/gitolite/bin

git@ubuntu12:~$ gitolite/install -to /home/git/bin
git@ubuntu12:~$ ls bin/
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
git@ubuntu12:~$

 

Vamos voltar em nossa estação de desenvolvimento para criar nossa chave ssh

git@ubuntu12:~$ exit
sair
jackson@ubuntu12:~$ exit
sair
Connection to 192.168.0.17 closed.
jackson@localhost: ~$

Vá para o diretório ~/.ssh

jackson@localhost: ~$ cd ~/.ssh
jackson@localhost: ~/.ssh$

Gerando a nossa chave:
ssh-keygen -t rsa -f git

jackson@localhost: ~/.ssh$ ssh-keygen -t rsa -f git
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in git.
Your public key has been saved in git.pub.
The key fingerprint is:
39:ed:8e:37:c3:7c:fc:90:b5:42:55:1f:1a:55:23:22 jackson@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| E . o.++|
| . . +.+|
| .. .|
| o . |
| S . . . |
| o . o . |
| o..+ . |
| o* oo |
| ...+ .. |
+-----------------+
jackson@localhost: ~/.ssh$

 

Agora precisamos enviar a chave gerada para o servidor, para isso vamos usar scp:

scp ~/.ssh/git.pub jackson@192.168.0.17:

jackson@localhost: ~/.ssh$ scp ~/.ssh/git.pub jackson@192.168.0.17:
jackson@192.168.0.17's password:
git.pub 100% 411 0.4KB/s 00:00
jackson@localhost: ~/.ssh$

 

Vamos agora voltar ao servidor para colocar a chave para o usuário git em seu diretório e configurar o gitolite para usar esta chave para o seu repositório principal.

ssh 192.168.0.17

jackson@localhost: ~/.ssh$ ssh 192.168.0.17
jackson@192.168.0.17's password:
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.11.0-20-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun May 4 22:11:54 BRT 2014

System load: 0.0 Processes: 74
Usage of /: 45.3% of 3.11GB Users logged in: 1
Memory usage: 16% IP address for eth0: 192.168.0.17
Swap usage: 0%

Graph this data and manage this system at:
https://landscape.canonical.com/

Last login: Sun May 4 19:20:34 2014 from 192.168.0.15
jackson@ubuntu12:~$

 

Duas ações importantes devem ser cometidas agora, sendo a primeira mover a chave enviada por scp para o diretório do usuário git e tornar o usuário git proprietário desta chave.

Para mover a chave use:

sudo mv git.pub /home/git/

jackson@ubuntu12:~$ sudo mv git.pub /home/git/
[sudo] password for jackson:
jackson@ubuntu12:~$

 

E para tornar o usuário git seu proprietário:

sudo chown git:git /home/git/git.pub

jackson@ubuntu12:~$ sudo chown git:git /home/git/git.pub
jackson@ubuntu12:~$

 

Passando a ser o usuário git

sudo su – git

jackson@ubuntu12:~$ sudo su - git
git@ubuntu12:~$

 

Vamos agora finalmente configurar o gitolite para trabalhar inicialmente com a chave que geramos:

/home/git/bin/gitolite setup -pk git.pub

git@ubuntu12:~$ /home/git/bin/gitolite setup -pk git.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
git@ubuntu12:~$

 

Vamos sair do servidor e voltar a nossa estação de desenvolvimento:

git@ubuntu12:~$ exit
sair
jackson@ubuntu12:~$ exit
sair
Connection to 192.168.0.17 closed.
jackson@localhost: ~/.ssh$

 

Agora vamos tentar clonar o repositório mais importante que teremos em nosso servidor. O gitolite-admin.

Lembre-se de sair do diretório ~/.ssh

Para clonar o repositório use:

git clone git@192.168.0.17:gitolite-admin

jackson@localhost: ~$ git clone git@192.168.0.17:gitolite-admin
Cloning into 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
Checking connectivity... done.
jackson@localhost: ~$

Observe que não fará diferença quem está acessando o servidor, sempre será git@IP_DO_SERVIDOR:NOME_DO_REPOSITORIO. É claro que veremos em outro post a instalação de novos usuários e a criação de novos repositórios

Quer inserir novos usuários? eu criei um post  Inserindo novo usuário no gitolite

 

 

Um comentário sobre “Montando um servidor de repositórios git com gitolite
1 Pings/Trackbacks para "Montando um servidor de repositórios git com gitolite"
  1. […] Se você não sabe como instalar o gitolite, eu criei um post Montando um servidor de repositórios git com gitolite […]

Deixe uma resposta

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

*