Problemas de permissão ao empurrar para o Git Remote

2

Passei os últimos dias tentando configurar um Git Remote no meu servidor para que eu possa enviar as alterações para o meu servidor da web para ele. O problema é que estou recebendo os seguintes erros ao fazer isso:

$ git push --porcelain --progress --recurse-submodules=check live refs/heads/master:refs/heads/master
'master' pushed: d689cce..4e755fc
Delta compression using up to 4 threads.
Total 3 (delta 2), reused 0 (delta 0)
remote: error: unable to create file .gitignore (Permission denied)        
remote: error: unable to create file .gitignore~ (Permission denied)        
remote: error: unable to create file index.js (Permission denied)        
remote: error: unable to create file package.json (Permission denied)   

Agora, percebo que isso tem algo a ver com a propriedade de arquivos e pastas, e que eu e / ou o git podem ou não ter acesso de gravação a determinadas pastas.

O problema é que eu não tenho a menor idéia de qual pasta eu não posso escrever ou como resolvê-lo.

Eu sou novato em mexer com a criação de um servidor da web a partir do zero, então aqui está o que eu fiz:

Eu passei por Como Configure a Implantação Automática com o Git com um VPS para tentar ver como eu deveria colocar o controle remoto em funcionamento. Isso me levou a criar as duas pastas a seguir: /var/repo/site.git e /var/www/website .

Sem ser informado sobre permissões, fui em frente e tentei empurrar para o controle remoto, contando imediatamente o primeiro bloqueio de permissão.

Então, consultei um amigo que sugeriu que eu fizesse um novo grupo, incluísse meu usuário no grupo e que /var/repo pertencesse ao grupo com as permissões 775 de leitura / gravação / execução. Ele também sugeriu que eu fizesse como sugerido aqui para garantir que a pasta /var/www tivesse as permissões certas; mas mesmo depois de tudo isso eu ainda não posso empurrar para o controle remoto como mostrado no erro acima.

Então, o que devo fazer para consertar isso? Eu estou em um obstáculo aqui.

Algumas informações sobre as coisas que eu uso:

  • SO do cliente: OSX Yosemite
  • SO do servidor: Ubuntu 15.04
  • Git Client: SmartGit 6.5 (por conveniência)
  • Eu uso o SSH em vez de HTTPS para conectar ao remoto
por Electric Coffee 13.07.2015 / 20:53

2 respostas

3

O problema não é o acesso de gravação em / var / repo - Acredito que, pelos erros que você copiou / colou, isso está configurado corretamente e provavelmente sempre foi.

O problema é a falta de permissões de gravação em / var / www.

Ao seguir as instruções que você vinculou ao que você configurou, há um script que leva automaticamente os arquivos que você envia para o repositório git no servidor e os publica em / var / www. Esta é uma abordagem inteligente na minha opinião, mas esse script (que vive no arquivo / var / repo / hooks / post-receive) está sendo executado como o mesmo que envia para o repositório git. Esse usuário não parece ter permissão para gravar em / var / www

Supondo que você já tenha seguido as etapas da resposta anterior, esses dois comandos adicionais devem corrigir as coisas:

chown -R root:git-users /var/www/

chmod -R g+rw /var/www/    
    
por 13.07.2015 / 22:09
1

Como você disse nos comentários que os usuários enviam para o git por meio de username@server , você precisa ter certeza de que todos os usuários do git tenham permissões de leitura e gravação no repositório.

Adicione todos os usuários a um grupo comum, chamado, digamos, git-users .

groupadd git-users

Agora adicione cada usuário git ao grupo:

usermod -a -G git-users <username>

Agora, altere o grupo de propriedade do repositório git:

chown -R root:git-users /var/repo/

Agora, defina permissões para que o grupo possa ler e escrever no repositório:

chmod -R g+rw /var/repo/

Agora, qualquer membro do grupo git-users tem acesso de leitura e gravação.

Agora precisamos do setgid bit apenas para diretórios:

 find /var/repo/ -type d -exec chmod g+s {} \;

Além disso, você precisa ativar a configuração sharedRepository na configuração do git remoto:

[core]
sharedRepository = true
    
por 13.07.2015 / 21:38