Esta seção descreverá como configurar, administrar e proteger um servidor git. Git tem muitas opções disponíveis. Para documentação mais detalhada, veja-se https://git-scm.com/book/en/v2.
As instruções a seguir instalarão um servidor git. Ele será configurado para usar OpenSSH como método de acesso remoto seguro.
A configuração do servidor consiste nas seguintes etapas:
            Você precisará ser o(a) usuário(a) root para a parte inicial da configuração.
            Crie o(a) usuário(a) e grupo git
            e defina um resumo de senha inutilizável com os seguintes
            comandos:
          
groupadd -g 58 git && useradd -c "Proprietário(a) do git" -d /home/git -m -g git -s /usr/bin/git-shell -u 58 git && sed -i '/^git:/s/^git:[^:]:/git:NP:/' /etc/shadow
            Colocar um resumo de senha inutilizável (substituindo
            ! por NP) desbloqueia a conta, mas ela não pode ser
            usada para se conectar via autenticação de senha. Isso é exigido
            pelo sshd para funcionar
            corretamente. Em seguida, crie alguns arquivos e diretórios no
            diretório "home" do(a) usuário(a) git, permitindo acesso ao
            repositório "git" usando chaves "ssh".
          
install -o git -g git -dm0700 /home/git/.ssh && install -o git -g git -m0600 /dev/null /home/git/.ssh/authorized_keys
            Para qualquer desenvolvedor(a) que devesse ter acesso ao
            repositório, adicione a chave pública "ssh" dele/dela em
            /home/git/.ssh/authorized_keys.
            Primeiro, acrescente algumas opções para evitar que os(as)
            usuários(as) usem a conexão com o "git" para encaminhamento de
            porta para outras máquinas que o servidor "git" possa alcançar.
          
echo -n "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " >> /home/git/.ssh/authorized_keys && cat <chave-ssh-usuário(a)> >> /home/git/.ssh/authorized_keys
            Também é útil definir o nome padrão da ramificação inicial de
            novos repositórios modificando a configuração do "git". Como o(a)
            usuário(a) root, execute:
          
git config --system init.defaultBranch trunk
            Por fim, adicione a entrada /usr/bin/git-shell ao arquivo de configuração
            /etc/shells. Esse shell foi
            definido no perfil do(a) usuário(a) git e serve para garantir que somente ações
            relacionadas ao "git" possam ser executadas:
          
echo "/usr/bin/git-shell" >> /etc/shells
            O repositório pode estar em qualquer lugar no sistema de
            arquivos. É importante que o(a) usuário(a) "git" tenha acesso de
            leitura/escrita a esse local. Usamos /srv/git como diretório base. Crie um novo
            repositório git com os seguintes
            comandos (como o(a) usuário(a) root):
          
            Em todas as instruções abaixo, usamos projeto1 como um nome de repositório de exemplo. Você deveria nomear seu repositório como um nome descritivo curto para seu projeto específico.
install -o git -g git -m755 -d /srv/git/projeto1.git && cd /srv/git/projeto1.git && git init --bare && chown -R git:git .
            Todas as instruções nesta seção e na próxima deveriam ser feitas em um sistema do(a) usuário(a), não no sistema do servidor.
            Agora que o repositório foi criado, ele pode ser usado pelos(as)
            desenvolvedores(as) para colocar alguns arquivos nele. Depois que
            a chave "ssh" do(a) usuário(a) for importada para o arquivo
            authorized_keys do "git", o(a)
            usuário(a) poderá interagir com o repositório.
          
Uma configuração mínima deveria estar disponível no sistema do(a) desenvolvedor(a) especificando o nome de usuário(a) e endereço de correio eletrônico dele(a). Crie esse arquivo de configuração mínima no lado do cliente:
cat > ~/.gitconfig <<EOF
[user]
        name = <nome-usuário(a)>
        email = <endereço-correio-eletrônico-usuário(a)>
EOF
          Na máquina do(a) desenvolvedor(a), configure alguns arquivos para serem enviados ao repositório como conteúdo inicial:
            O termo gitserver usado abaixo deveria ser o nome do dispositivo (ou endereço "IP") do servidor "git".
mkdir meuprojeto cd meuprojeto git init --initial-branch=trunk git remote add origin git@gitserver:/srv/git/projeto1.git cat >LEIAME <<EOF Este é o arquivo 'LEIAME' EOF git add LEIAME git commit -m 'Criação inicial do LEIAME' git push --set-upstream origin trunk
            O conteúdo inicial agora é enviado ao servidor e fica disponível
            para outros(as) usuários(as). Na máquina atual, o argumento
            --set-upstream origin trunk agora
            não é mais necessário, pois o repositório local agora está
            conectado ao repositório remoto. Envios subsequentes podem ser
            realizados como
          
git push
Outros(as) desenvolvedores(as) agora podem clonar o repositório e fazer modificações no conteúdo (desde que as chaves "ssh" deles(as) tenham sido instaladas):
git clone git@gitserver:/srv/git/projeto1.git cd projeto1 vi LEIAME git commit -am 'Correção para o arquivo LEIAME' git push
            
              Essa é uma configuração de servidor muito básica baseada no
              acesso OpenSSH. Todos(as)
              os(as) desenvolvedores(as) estão usando o(a) usuário(a)
              git para realizar ações no
              repositório e as mudanças que os(as) usuários(as) estão
              "comitando" podem ser distinguidas como o nome de usuário(a)
              local (veja-se ~/.gitconfig)
              sendo registrado nos conjuntos de mudanças.
            
            O acesso é restrito pelas chaves públicas adicionadas ao arquivo
            authorized_keys do "git" e não
            existe opção para o público exportar/clonar o repositório. Para
            habilitar isso, continue com a etapa quatro (4) para configurar o
            servidor "git" para acesso público somente leitura.
          
            Na "URL" usada para clonar o projeto, o caminho absoluto (aqui
            /srv/git/projeto1.git) tem de ser
            especificado, pois o repositório não está no diretório "home" do
            "git", mas em /srv/git. Para
            eliminar a necessidade de expor a estrutura de instalação do
            servidor, um link simbólico pode ser adicionado no diretório
            "home" do "git" para cada projeto, como isto:
          
ln -svf /srv/git/projeto1.git /home/git/
Agora, o repositório pode ser clonado usando
git clone git@gitserver:projeto1.git
A configuração descrita acima torna um repositório disponível para usuários(as) autenticados(as) (via fornecimento do arquivo de chave pública "ssh"). Também existe uma maneira simples de publicar o repositório para usuários(as) não autenticados(as) — certamente, sem acesso de escrita.
A combinação do acesso via "ssh" (para usuários(as) autenticados(as)) e a exportação de repositórios para usuários(as) não autenticados(as) via processo de segundo plano é, na maioria dos casos, suficiente para um sítio de desenvolvimento.
            
              O processo de segundo plano estará alcançável na porta
              9418 por padrão. Certifique-se de
              que a configuração do seu "firewall" permite acesso a essa
              porta.
            
Para iniciar o servidor em tempo de inicialização, instale o script de inicialização "git-daemon" incluído no pacote blfs-bootscripts-20230101:
make install-git-daemon
            Para a finalidade de permitir que o git exporte um repositório, um arquivo
            chamado git-daemon-export-ok é
            necessário em cada diretório de repositório no servidor. O
            arquivo não necessita de conteúdo; apenas a existência dele
            habilita; a ausência dele desabilita a exportação daquele
            repositório.
          
touch /srv/git/projeto1.git/git-daemon-export-ok
            O "script" para iniciar o processo de segundo plano "git" usa
            alguns valores padrão internamente. O mais importante é o caminho
            para o diretório do repositório que está definido como
            /srv/git. Caso, por algum motivo,
            você tenha criado o repositório em um local diferente, você
            precisará informar ao "script" de inicialização onde o
            repositório pode ser encontrado. Isso pode ser conseguido criando
            um arquivo de configuração chamado /etc/sysconfig/git-daemon. Esse arquivo de
            configuração será importado se existir, significando que ele é
            opcional. O arquivo pode ser parecido com:
          
# Começo /etc/sysconfig/git-daemon # Especifica o local do repositório "git" GIT_BASE_DIR="/srv/git/" # Diretórios adicionados à lista de permissões DFT_REPO_DIR="$GIT_BASE_DIR" # Adiciona opções extras que serão anexadas ao comando 'git daemon' # executado no script de inicialização GIT_DAEMON_OPTS="" # Término /etc/sysconfig/git-daemon
Existem somente três opções a configurar no arquivo de configuração:
GIT_BASE_DIR=<nome-diretório>
Especifique o local dos repositórios "git". Os caminhos relativos usados ao acessar o processo de segundo plano serão traduzidos relativos a esse diretório.
DFT_REPO_DIR=<nome-diretório>
                  Esse diretório é adicionado à lista branca de diretórios
                  permitidos. Essa variável pode conter vários nomes de
                  diretório, mas geralmente é definida igual a GIT_BASE_DIR.
                
GIT_DAEMON_OPTS=<opções>
                  No caso de opções especiais para o comando git daemon serem
                  necessárias, elas tem de ser especificadas nessa
                  configuração. Um exemplo pode ser ajustar o número da porta
                  onde o processo de segundo plano está escutando. Nesse
                  caso, adicione --port=<número da
                  porta> a essa variável. Para mais informações
                  relativas a quais opções podem ser definidas, dê uma olhada
                  na saída gerada de git daemon
                  --help.
                
Após iniciar o processo de segundo plano, usuários(as) não autenticados(as) conseguem clonar repositórios exportados usando
git clone git://gitserver/projeto1.git
            Como o diretório base é /srv/git
            por padrão (ou definido como um valor personalizado na
            configuração), git interpreta o
            caminho de entrada (/projeto1.git) relativo a esse diretório
            base, de modo que o repositório em /srv/git/projeto1.git seja servido.