Quem necessita um repositório com controlo de versões (p.ex. git) partilhado entre vários utilizadores encontra nos serviços Bitbucket ou GitHub uma solução simples, mas essa aparente simplicidade traz limitações e falta de privacidade.
Estes serviços, na sua opção gratuita, limitam a utilização dos repositórios até X utilizadores ou apenas alojam os projectos de forma pública. Estas limitações fazem com que se tenha de optar pelos serviços pagos que também nos disponibilizam.
Para quem, sem custos extra, não quer ter limite de utilizadores e quer a privacidade de ter o seu código dentro da sua rede (ou quando muito, apenas partilhado via internet com utilizadores por nós controlados), tem a seguinte opção:
- Configurar um repositório GIT num servidor na sua rede interna. (Como o acesso ao nosso repositório "interno" é feito normalmente via SSH, este serviço pode também ser aberto ao acesso remoto via internet)
Ora como o podemos configurar:
# No servidor do repo ...
# Temos que criar um grupo para os utilizadores do repo. git
sudo groupadd gitrepo
# adicionar o(s) users ao novo grupo
sudo adduser nunolima gitrepo
sudo adduser sofia gitrepo
# para criar um repo que pode ser usada/montada remotamente (sem um dir. worker) tem que se usar o param. --bare
# o param. --shared define as permissões de acesso dos users, groups e others (no minimo 660)
# o nome do dir., por convenção, termina em .git ( p.ex. projecto.git )
git init --bare --shared=0660 gitrepo-proj01.git
# para um cliente local usar a repo deve fazer:
git clone file:////home/nunolima/dev/gitrepo-proj01.git nome_dir_do_proj
# para um cliente remoto, usa-se
git clone nunolima@<SERVER_IP>:/home/nunolima/dev/gitrepo-proj01.git nome_dir_do_proj
# o comando anterior criou uma cópia local, num dir. com o nome "nome_dir_do_proj"
cd nome_dir_do_proj
# caso o sincronismo do nosso clone tenha falhado, sermos avisados para executar o seguinte comando:
git branch --unset-upstream
# depois fazemos uma utilização (local) normal:
git status
git add .
git commit -m "comentários"
#etc
# para enviar/aplicar o nosso estado LOCAL no SERVIDOR
git remote # lista os nomes dos servidores remotos conhecidos pelo nosso git local
git push origin master # origin é o nome default, dado a um servidor remoto quando foi feito o clone, e master é o nosso master local
# para actualizar (merge) o nosso projecto local com o existente no servidor, executamos ...
git pull origin master # faz um merge do que está no servidor com a nossa versão master
# para não fazer um merge automático em cima do nosso master local
# podemos criar uma branch (p.ex. updates-do-servidor), para isso executamos ...
git fetch origin updates-do-servidor
Experimentem. :)