-
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.4 Git no Servidor - Configurando o Servidor
Configurando o Servidor
Vamos percorrer a configuração do acesso SSH no lado do servidor.
Neste exemplo, você usará o método authorized_keys para autenticar os seus usuários.
Também presumimos que você esteja executando uma distribuição Linux padrão como o Ubuntu.
|
Note
|
Grande parte do que é descrito aqui pode ser automatizado usando o comando |
Primeiro, você cria uma conta de usuário git e um diretório .ssh para esse usuário.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Em seguida, você precisa adicionar algumas chaves públicas SSH de desenvolvedor ao arquivo authorized_keys para o usuário git.
Vamos supor que você tenha algumas chaves públicas confiáveis e as tenha salvo em arquivos temporários.
Novamente, as chaves públicas se parecem com algo assim:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Basta anexá-las ao arquivo authorized_keys do usuário git em seu diretório .ssh:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Agora, você pode configurar um repositório vazio para eles executando git init com a opção --bare, que inicializa o repositório sem um diretório de trabalho:
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
Então, John, Josie ou Jessica podem fazer o push da primeira versão do projeto deles para esse repositório, adicionando-o como remoto e fazendo o push de um branch.
Observe que alguém deve acessar o shell da máquina e criar um repositório nu toda vez que você quiser adicionar um projeto.
Vamos usar gitserver como o hostname do servidor no qual você configurou o seu usuário git e repositório.
Se você o estiver executando internamente e configurar o DNS do gitserver para apontar para esse servidor, poderá usar os comandos da mesma forma (assumindo que myproject é um projeto existente com arquivos nele):
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
Neste ponto, os outros podem clonar e fazer o push das alterações de volta com a mesma facilidade:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
Com este método, você pode colocar um servidor Git de leitura/gravação em funcionamento rapidamente para um punhado de desenvolvedores.
Você deve notar que atualmente todos esses usuários também podem logar no servidor e obter um shell como o usuário git.
Se você quiser restringir isso, terá que alterar o shell para outra coisa no arquivo /etc/passwd.
Você pode restringir facilmente a conta de usuário git a apenas atividades relacionadas ao Git com uma ferramenta de shell limitado chamada git-shell que vem com o Git.
Se você definir isso como o login shell da conta de usuário git, então essa conta não poderá ter acesso de shell normal ao seu servidor.
Para usar isso, especifique git-shell em vez de bash ou csh para o login shell dessa conta.
Para fazer isso, você deve primeiro adicionar o nome do caminho completo (pathname) do comando git-shell em /etc/shells, se ele ainda não estiver lá:
$ cat /etc/shells # see if git-shell is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
Agora você pode editar o shell para um usuário usando chsh <username> -s <shell>:
$ sudo chsh git -s $(which git-shell)
Agora, o usuário git ainda pode usar a conexão SSH para fazer o push e o pull de repositórios Git, mas não pode usar o shell na máquina.
Se você tentar, verá uma rejeição de login como esta:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
Neste ponto, os usuários ainda conseguem usar o encaminhamento de porta SSH para acessar qualquer host que o servidor git consiga alcançar.
Se você quiser evitar isso, pode editar o arquivo authorized_keys e adicionar as seguintes opções antes de cada chave que gostaria de restringir:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
O resultado deve ficar assim:
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
Agora, os comandos de rede do Git ainda funcionarão perfeitamente, mas os usuários não conseguirão obter um shell.
Como a saída (output) indica, você também pode configurar um diretório no diretório inicial (home) do usuário git que personaliza um pouco o comando git-shell.
Por exemplo, você pode restringir os comandos Git que o servidor aceitará ou pode personalizar a mensagem que os usuários veem se tentarem fazer SSH dessa forma.
Execute git help shell para obter mais informações sobre a personalização do shell.