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:
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.