No meu servidor, eu tenho um repositório git cobrindo um diretório para ser legível pela web. O conteúdo do diretório www
deste usuário em particular será legível e gravável por esse usuário, mas eu quero que o diretório .git
seja de propriedade de root.
Existe alguma maneira de tornar o diretório .git suficientemente legível para que o usuário não-root possa fazer o check-out de arquivos como um meio simples de reverter? Adicionar e confirmar não são permitidos (somente o administrador realmente marca as alterações como "aceitas", o que pode resultar na sua promoção de teste), mas, em teoria, deve ser possível para um usuário não privilegiado ler .git
e alterar arquivos em www
. Comandos como git log
e git show
não apresentam problemas nessa configuração, mas a tentativa de um checkout falha:
$ git checkout www/some-file-name
fatal: Unable to create '/REDACTED/PATH/.git/index.lock': Permission denied
Posso pedir ao git para não bloquear o índice? Posso de alguma forma permitir que o índice seja bloqueado sem abrir muito mais? (Obviamente, não posso tornar o diretório .git
gravável, pois isso perderia toda a proteção.)
NOTA: É possível contornar isso para um único arquivo de cada vez:
$ git show HEAD:www/some-file-name >www/some-file-name
Portanto, claramente não é uma limitação fundamental. Talvez seja só que git checkout
assume que está fazendo um switch de ramificação? É a maneira mais conveniente de gerenciar curingas e árvores de diretórios.
EDIT: Isso não está falando de um comutador de ramificação. Eu quero poder usar git checkout
para verificar um arquivo único . É por isso que a resposta óbvia não é aplicável aqui.