Configurando um servidor git com ssh
Como faz um bom tempo que eu não publico nada, vou começar devegar, então, pode ser que o artigo não esteja 100%, mas vou melhorando com o tempo.
Bom, a ideia desse artigo é demonstrar como configurar um servidor git sobre o sistema Debian Lenny para trabalhar com o versionamento de coisas (Códigos entram como um bom exemplo aqui). Como a minha ideia não é explicar o que é o git, =), fica um link de referências.
Esse artigo irá progredir referindo-se sempre a cliente-servidor, aonde o prompt cliente@host é o cliente e o prompt server@host é o servidor.
O primeiro passo é instalar o pacote git do repositório, então para isso como adminstrador do servidor:
server@host# aptitude install git-core
Confirme se o pacote foi realmente instalado com o dpkg:
server@host# dpkg -l git-core
ii git-core
É importante nesse momento entender que o git pode trabalhar remotamente em 3 protocolos diferentes, via SSH, via GIT e
via HTTPs. Existem alguns pros e contras de se utilizar cada um desses protocolos, um boa referência para essa escolha esta aqui. Escolhi o SSH pela facilidade e usabilidade do mesmo.
Após instalar o git no servidor, vamos configurar um usuário para fazer o clone e o commit remotamente. Ou seja, um usuário do sistema convencional. Se você quiser utilizar seu próprio usuário do servidor, apenas pule essa etapa.
server@host# adduser git
Fill the gaps
Como nosso usuário criado, vamos agora criar nosso primeiro repositório git externo. Para inicialiar o repositório, é preciso lembrar que devemos utilizar a opção – -bare e usar o nome do repositório sempre com .git no fim, para mais informações consulte a documentação do git.
server@host# su git
git@host$ mkdir repo.git
git@host$ cd repo.git
git@host$ git –bare init
Initialized empty Git repository in /home/git/repo.git/
Por hora, a configuração do servidor acaba aqui. Lembre-se de fazer suas configurações do git no arquivo config se você tiver alguma preferência fora do padrão.
Na máquina cliente vamos dar o primeiro commit para inicializar o repositório:
cliente@host$ mkdir projeto
cliente@host$ echo “Inicializando o repositório” > readme
cliente@host$ git add .
cliente@host$ git commit -m ‘Inicializando repo’
cliente@host$ git remote add origin git@host:repo.git
cliente@host$ git push origin master
Counting objects: 13, done.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (13/13), 1.20 KiB, done.
Total 13 (delta 1), reused 0 (delta 0)
To git@host:repo.git
* [new branch] master -> master
Agora com o repositório inicializado, podemos de qualquer lugar com as credenciais do usuário git, fazer o clone do repositório. Para isso:
cliente@host$ mkdir meu_projeto
cliente@host$ cd meu_projeto
cliente@host$ git clone git@noroyalties.org:repo.git
Initialized empty Git repository in $HOME/meu_projeto/.git/
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (7/7), done.
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (1/1), done.
remote: Total 13 (delta 1), reused 0 (delta 0)
Com clone feito, para fazer uma alteração basta fazer:
cliente@host$ cd repo
cliente@host$ echo “mais mais mais” >> readme
cliente@host$ git add .
cliente@host$ git commit -m ‘fazendo uma modificacao’
cliente@host$ git push origin
Counting objects: 5, done.
Writing objects: 100% (3/3), 254 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@host:repo.git
a0530fe..471b6ae master -> master
Done. Repositório configurado, Quem ainda quiser que ninguem consiga fazer um acesso como git no seu host, logue como git e troque a shell padrão desse usuário.
server@host# su git
git@host$ chsh -s /usr/bin/git-shell
git@host$ exit
Lembe-se que a partir de agora não é possivel logar mais como o usuário git. Então toda vez que for configurar um repositório novo, não esqueça de arrumar as permissões.
Uma boa fonte de documentação é o livro Pro Git, existe uma versão online, da onde tirei boa parte do know-how para escrever esse artigo.
Desde já pesso desculpas pelo meu português e algum erro que possa ter nesse artigo. Para qualquer dúvida basta comentar.
[]`s