-
1. Primeiros Passos
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O que é Git?
- 1.4 A Linha de Comando
- 1.5 Instalando o Git
- 1.6 Configuração inicial do Git
- 1.7 Obtendo Ajuda
- 1.8 Resumo
-
2. Fundamentos do Git
-
3. Ramificação (Branching) no Git
-
4. Git no Servidor
- 4.1 Os Protocolos
- 4.2 Colocando o Git em um Servidor
- 4.3 Gerando a sua Chave Pública SSH
- 4.4 Configurando o Servidor
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Opções de Hospedagem de Terceiros
- 4.10 Resumo
-
5. Git Distribuído
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Seleção de Revisão
- 7.2 Área de Stage Interativa
- 7.3 Fazendo Stash e Limpando
- 7.4 Assinando Seu Trabalho
- 7.5 Pesquisando (Searching)
- 7.6 Reescrevendo o Histórico
- 7.7 Reset Desmistificado
- 7.8 Merging Avançado
- 7.9 Rerere
- 7.10 Depurando com Git
- 7.11 Submódulos
- 7.12 Empacotando (Bundling)
- 7.13 Substituir (Replace)
- 7.14 Armazenamento de Credenciais
- 7.15 Resumo
-
8. Customizando o Git
- 8.1 Configuração do Git
- 8.2 Atributos do Git
- 8.3 Hooks do Git
- 8.4 Uma Política de Exemplo Imposta pelo Git
- 8.5 Resumo
-
9. Git e Outros Sistemas
- 9.1 Git como Cliente
- 9.2 Migrando para o Git
- 9.3 Resumo
-
10. Git Internals (Por Dentro do Git)
- 10.1 Encanamento e Porcelana (Plumbing and Porcelain)
- 10.2 Objetos do Git
- 10.3 Referências do Git
- 10.4 Arquivos de pacote (Packfiles)
- 10.5 Refspec
- 10.6 Protocolos de Transferência
- 10.7 Manutenção e Recuperação de Dados
- 10.8 Variáveis de Ambiente
- 10.9 Resumo
-
A1. Appendix A: O Git em Outros Ambientes
- A1.1 Interfaces Gráficas
- A1.2 Git no Visual Studio
- A1.3 Git no Visual Studio Code
- A1.4 Git no IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git no Sublime Text
- A1.6 Git no Bash
- A1.7 Git no Zsh
- A1.8 Git no PowerShell
- A1.9 Resumo
-
A2. Appendix B: Incorporando o Git nos seus Aplicativos
- A2.1 Linha de Comando do Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Comandos do Git
- A3.1 Configuração e Ajustes
- A3.2 Obtendo e Criando Projetos
- A3.3 Snapshots Básicos
- A3.4 Branches e Merges
- A3.5 Compartilhando e Atualizando Projetos
- A3.6 Inspeção e Comparação
- A3.7 Depuração
- A3.8 Patches
- A3.9 E-mail
- A3.10 Sistemas Externos
- A3.11 Administração
- A3.12 Comandos de Encanamento
4.6 Git no Servidor - Smart HTTP
Smart HTTP
Agora temos acesso autenticado via SSH e acesso não autenticado via git://, mas também há um protocolo que pode fazer as duas coisas ao mesmo tempo.
Configurar o Smart HTTP é basicamente habilitar um script CGI que é fornecido com o Git chamado git-http-backend no servidor.
Este CGI lerá o caminho e os cabeçalhos enviados por um git fetch ou git push para uma URL HTTP e determinará se o cliente pode se comunicar por HTTP (o que é verdadeiro para qualquer cliente desde a versão 1.6.6).
Se o CGI vir que o cliente é inteligente (smart), ele se comunicará inteligentemente com ele; caso contrário, recorrerá (fall back) ao comportamento burro (dumb behavior) (portanto, é retrocompatível para leituras com clientes mais antigos).
Vamos analisar uma configuração muito básica. Vamos configurar isso com o Apache como servidor CGI. Se você não tem o Apache configurado, você pode fazê-lo em uma máquina Linux com algo assim:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Isso também habilita os módulos mod_cgi, mod_alias e mod_env, que são todos necessários para que isso funcione corretamente.
Você também precisará definir o grupo de usuários Unix dos diretórios /srv/git para www-data para que o seu servidor web possa ter acesso de leitura e gravação aos repositórios, porque a instância do Apache executando o script CGI estará (por padrão) sendo executada como aquele usuário:
$ chgrp -R www-data /srv/git
Em seguida, precisamos adicionar algumas coisas à configuração do Apache para executar o git-http-backend como o manipulador (handler) de qualquer coisa que chegue ao caminho /git do seu servidor web.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Se você omitir a variável de ambiente GIT_HTTP_EXPORT_ALL, o Git servirá aos clientes não autenticados apenas os repositórios com o arquivo git-daemon-export-ok neles, assim como o Git daemon fez.
Finalmente, você vai querer dizer ao Apache para permitir requisições ao git-http-backend e fazer com que as gravações sejam autenticadas de alguma forma, possivelmente com um bloco Auth como este:
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
Isso exigirá que você crie um arquivo .htpasswd contendo as senhas de todos os usuários válidos.
Aqui está um exemplo de adição de um usuário “schacon” ao arquivo:
$ htpasswd -c /srv/git/.htpasswd schacon
Há inúmeras maneiras de fazer o Apache autenticar usuários, você terá que escolher e implementar uma delas. Este é apenas o exemplo mais simples que pudemos imaginar. Você quase certamente também vai querer configurar isso com SSL para que todos esses dados sejam criptografados.
Não queremos nos aprofundar muito na toca do coelho (rabbit hole) dos detalhes da configuração do Apache, pois você pode muito bem estar usando um servidor diferente ou ter necessidades de autenticação diferentes.
A ideia é que o Git vem com um CGI chamado git-http-backend que, quando invocado, fará toda a negociação para enviar e receber dados via HTTP.
Ele não implementa nenhuma autenticação em si, mas isso pode ser facilmente controlado na camada do servidor web que o invoca.
Você pode fazer isso com quase qualquer servidor web com capacidade para CGI, então escolha o que você conhece melhor.
|
Note
|
Para mais informações sobre a configuração de autenticação no Apache, confira a documentação do Apache aqui: https://httpd.apache.org/docs/current/howto/auth.html. |