Olá!
Seguindo o tutorial que encontrei no Dito.blog, conseguí utilizar o gitosis para gerenciar meus repositórios git! Encontrei alguns problemas que o tutorial não pôde me responder, então vou escrever aqui a minha experiência, os problemas que encontrei e as soluções que adotei.
Vamos lá.
Em primeiro lugar você terá que decidir qual vai ser a máquina que vai conter o repositório principal – Sim, eu seu que estamos falando de git e, de acordo com a filosofia do versionamento distribuído, não existe um repositório principal (que cheira a versionamento centralizado). Mas todos nós (mesmo os mais chiitas) havemos de concordar que é necessário, ao menos, termos um repositório X de onde pegar as coisas pra enviar pro ambiente de testes e, posteriormente, produção. Dessa forma, pra eu não ser masscrado, (se é que alguém vai, um dia, ler isto aqui) vamos trocar o nome de repositório central para repositório de validação (eu o chamei assim pra não ficar repositório de testes, o que daria uma conotação um pouco estranha… de qualquer forma eu quis dizer que este é o dito repositório que vai servir o ambiente de testes… chame-o do que quiser!) .
Para facilitar:
- servpc = Máquina que vai ter o repositório de validação
- seupc = O seu pc! – A máquina do desenvolvedor que vai acessar o repositório central de validação.
Mãos à obra!
No servidor do repositório central servpc:
Suponho que você já tenha o git instalado 😉
Se não tem, instale!
sudo apt-get install git-core
Agora instale o servidor ssh no servpc:
Você pode usar o gerenciador de pacotes ou ir ao terminal e digitar
sudo apt-get install openssh-server openssh-client openssh-blacklist
Agora vamos instalar o gitosis.
Se você já tem uma pasta sources, ótimo; se não tem, crie uma! Depois entre nela…
mkdir ~/sources cd ~/sources
Agora faça o clone do source do gitosis:
git clone git://eagain.net/gitosis.git cd gitosis
O gitosis é escrito em python, então precisaremos desse cidadão pra executarmos a instação:
sudo apt-get install python-setuptools
Agora sim, podemos instalar o gitosis:
sudo python setup.py install
Ótimo, agora precisaremos criar um usuário (não se esqueça que ainda estamos no servpc, ok?) para acessarmos os repositórios via ssh. Copie e cole o código a seguir (assim como está) no terminal e pressione enter:
sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git
A saída deve ser pacecida com essa:
Adicionando usuário de sistema `git' (UID XXX) ... Adicionando novo grupo `git' (GID XXX) ... Adicionando novo usuário `git' (UID XXX) ao grupo `git' ... Criando diretório pessoal `/home/git' ...
Aqui entra um detalhe que não encontrei nos tutoriais que seguí (e isto é o que me levou a escrever este post): Não me pergunte o motivo mas, no ubuntu, mesmo ao criar um usuário utilizando o parâmetro –disabled-password, ao tentar fazer uma conexão utilizando ssh, o terminal pede a entrada da senha. Logo, se não tivermos uma senha definida, não conseguiremos efetuar a conexão. Então vamos definir uma senha para o usuário git:
sudo passwd git
Entre com uma senha de sua preferência, confirme… e não se esqueça dela!
Muito bem, vamos para o pc do desenvolvedor!
No seupc:
Crie uma uma chave RSA para o seu usuário, dessa forma:
ssh-keygen -t rsa
Repare que foi criada uma pasta .ssh na sua home (o comando ls -a | grep ssh vai te ajudar a reparar isso).
Agora será necessário exportar a sua chave pública para o servpc, dessa forma:
scp ~/.ssh/id_rsa.pub git@servpc:/home/git/
Se ele perguntar alguma coisa responda yes. Depois entre com a senha que você definiu para o usuário git e pronto.
Agora volte ao servpc…
No servpc:
Inicie o gitosis, dessa forma:
sudo -H -u git gitosis-init < /home/git/id_rsa.pub[/sourcecode] O resultado deverá ser o seguinte [sourcecode language='html']Initialized empty Git repository in ./ Initialized empty Git repository in ./[/sourcecode] Precisaremos alterar as permissões do arquivo post_update, portanto executaremos o seguinte comando: [sourcecode language='html']sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update[/sourcecode] Excelente! A configuração do gitosis está pronta, já podemos criar o nosso projeto! <h3><strong><em>No </em></strong>seupc<strong><em>:</em></strong></h3> Bom, vamos clonar o projeto gitosis-admin (que, por sinal, é um repositório git também) para a sua máquina, dessa forma: git clone git@servpc:gitosis-admin.git cd gitosis-admin
Edite o arquivo gitosis.conf com o gedit (gedit gitosis.conf) e adicione as linhas do seu projeto:
[group seu_time] writable = nome_projeto members = seu_usuario@seupc
Dê um commit nesta alteração e envie isto ao repositório no servpc:
git commit -a -m "Criacao do projeto nome_projeto" git push
Perfeito! Agora você vai criar o novo projeto normalmente na pasta que você preferir. Eu crio os meus em ~/projects/
mkdir nome_projeto cd nome_projeto git init touch README git add . git add README git remote add origin git@servpc:nome_projeto.git git commit -a -m "Iniciando o projeto..." git push origin master:refs/heads/master
Prontinho amigão, agora seu repositório está funcionando perefeitamente.
Para adicionar novos usuários você vai precisar copiar as chaves públicas deles para a pasta keydir do repositório gitosis-admin, adicionr os nomes dos usuários no item members do arquivo gitosis.conf (separando por espaçoes), commitar essas alterações e dar um push nisso tudo!
Por exemplo, você quer que o João tenha acesso ao repositório que acamos de criar. Então copie o arquivo id_rsa.pub dele (que você já sabe como criar) para o diretório …/gitosis-admin/keydir/ . Mas ao copiar, renomeie o nome do arquivo para este padrão: nomeUsuario@nomeMaquina – Exatamente o que aparece no começo da linha do terminal. Aqui, por exemplo, quando abro o terminal me aparece o seguinte filipe@filipenote:~\ $.
cd ~/gitosis-admin cp ~/joao@joaopc.pub keydir/ git add keydir/joao@joaopc.pub
Altere o arquivo gitosis.conf dessa forma:
[group seu_time] writable = nome_projeto members = seu_usuario@seupc joao@joaopc
Agora adicione, comite e dê um push nessas alterações.
git add gitosis.conf git commit -a -m "Inserindo acesso ao joao para o projeto" git push origin master:refs/heads/master
Problemas pós-operatórios…
Agora vem um problemão que tive após criar o meu primeiro repositório…
Depois de criar o repositório, não conseguí mais dar push no repositório gitosis-admin, o que me impossibilitava de adicionar novos usuário e etc…
A princípio, a soluçào que encontrei pra isso foi logar como root no servpc, dar um git clone no repositório usando seu caminho literal (/home/git/repositories/gitosis-admin.git) e fazer as alterações nesse contexto.
Funcionou… mas nào me satisfiz com isso… então resolvi testar executar o comando sudo -H -u git gitosis-init < /home/git/id_rsa.pub novamente e… deu certo!
Bom, na verdade eu precisei reescrever o arquivo gitosis.conf, mas depois disso, tudo ficou normal!
É isso aí… espero que tenha conseguido ajudar alguém com problemas parecidos.
Um abraço!
Muito bom, parabens!!!
estou com uma dúvida:
cliff@cliff-laptop:~/sources/gitosis$ sudo -H -u git gitosis-init < /home/cliff/git/id_rsa.pub
bash: /home/cliff/git/id_rsa.pub: Arquivo ou diretório inexistente
como buscar aonde está o arquivopara iniciar o gitosis ?
Olá Cliff, você copiou o seu id_rsa.pub pra lá?
(…)
Agora será necessário exportar a sua chave pública para o servpc, dessa forma:
scp ~/.ssh/id_rsa.pub git@servpc:/home/git/
Se ele perguntar(…)
Cara, segui um tutorial em inglês, e consegui configurar tudo certo. Adicionei novos usuários no projeto e está funcionando perfeitamente.
O problema veio agora, ao tentar entrar no ssh com o root
ssh root@ip
Ele retorna a seguinte informação:
Até agora não consegui identificar como resolver. Se tiver alguma luz, agradeço 🙂
Ops! O IP acabou indo na informação do erro retornado. Remove, por favor 🙂 Valeu