E quando não havia gestores de repositórios Git?

Desde a criação da ferramenta Git, surgiram diversos gestores de repositórios como GitHub, o BitBucket, o GitLab e entre outros. Estas ferramentas simplificam a criação destes repositórios. No entanto, antigamente estas ferramentas não exisitiam, mas ainda assim era possível criar repositórios Git e partilhar com outros developers criando servidores Git adequados.

O artigo de hoje irá demonstrar uma pequena experiência em criação de servidores realizada por mim com o uso de uma máquina virtual com Linux e uma máquina Windows.

Primeiro, devo avisar que nos dias de hoje, não vai haver praticamente ninguém a criar servidores Git pois as ferramentas que hoje existem já simplificam isto por nós. É possível que isto exista ainda em algumas empresas que tenham projetos secretos guardados em servidores Git.

A motivação de fazer esta experiência deve-se à minha recente experiência pessoal com o GitHub, que a partir de fevereiro de 2024, todos os utilizadores são forçados a usarem autenticação por dois fatores e os meus pares terem de andar a pedir-me as chaves do autenticador e por decisão nossa, nesse projeto em questão, migramos o repositório para um servidor Git self-hosted para evitar essas perdas de tempo. Tal como já falei no último artigo sobre a segurança, sou apologista da segurança de dados e nada contra usar 2FA. O problema é obrigar toda a gente a usar o que às vezes pode ser inconveniente. Isto é uma opinião pessoal, mas para outro artigo.

Em comunicação de dados e redes de computadores, temos protocolos como TCP e o UDP. O protocolo TCP envia pacotes para outra máquina e caso falhe, o computador que envia recebe um sinal para reenviar novamente o pacote. Quando o outro computador recebe um pacote, a outra máquina responde com um sinal ACK a dizer que recebeu o pacote. O protocolo UDP é utilizado quando queremos enviar dados em tempo real. Para um acesso a um servidor, existe um URI: “tcp://username:password@your_ip:port”. Desta forma podemos aceder a uma base de dados, a um servidor HTTP e entre outros. Para os servidores Git, o processo é semelhante. O Git utiliza SSH(Secure Shell) que permite aceder a outro computador através do terminal de forma segura.

Sabendo isto, temos tudo para criar um servidor Git.

A primeira coisa a se fazer é abrir a porta do SSH no Linux instalando o servidor SSH.



Fonte: https://ubuntu.com/server/docs/openssh-server


De seguida inicia-se o serviço com o comando:

Fonte: https://www.cyberciti.biz/faq/ubuntu-linux-install-openssh-server/

De seguida, pode-se iniciar o processo de criação do servidor.

O processo passa por criar um utilizador qualquer. Pode ser com o nome git e definir as suas permissões.


Fonte: https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server

De seguida, inicia-se um repositório git com um comando git init diferente do habitual:



O próximo passo é expor uma porta específica do computador que será servidor git (porta 22). Para efeitos de demonstração, vou usar o ngrok, no entanto, o mais seguro é terem um domínio certificado vosso e instalarem o domínio no vosso computador e reencaminhar as portas do vosso router.


De seguida, o vosso computador está exposto a toda a gente do mundo. Quem tiver o URL do computador terá acesso à máquina.

Agora o procedimento será na máquina Windows.


Inserindo o protocolo e o caminho do repositório criado, executamos o comando:

Aqui ele vai pedir a senha do utilizador git que no Ubuntu deve obrigatoriamente ser definida.


Depois de clonar o repositório, o repositório vem vazio. No entanto terão de dar push para o repositório de alguma coisa. Neste caso o meu repositório já tinha lá coisa, então aparece-me este ficheiro README.md:


Isto funciona como um repositório GitHub. É exatamente da mesma forma, no entanto antes de existir GitHub, era isto que se fazia.

Este procedimento foi o que eu e os meus pares fizemos para acabarmos com as confusões das chaves de autenticação. No entanto, este procedimento já não se usa graças ao GitHub, ao BitBucket e entre outros que existem. E se eu quisesse migrar este repositório para o GitHub?

A migração é um procedimento bastante fácil (https://stackoverflow.com/questions/22265837/transfer-git-repositories-from-gitlab-to-github-can-we-how-to-and-pitfalls-i). É só trocar o remote para o GitHub e está resolvido o problema.

Em suma, embora este método não seja muito utilizado, certamente ainda existe empresas que tenham estes servidores git legacy. Hoje graças ao GitHub e entre outros já não temos de fazer isto, no entanto, é importante que todos os programadores aprendam estas bases para entender o que existe atualmente.