Existe uma maneira de evitar que o git altere permissões e propriedade no pull?

Existe uma maneira de evitar que o git altere permissões e propriedade no pull?

Cada vez que faço git pullou git reset, gitredefine as alterações nas permissões e propriedade que fiz. Veja por si mesmo:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

A saída:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

Existe uma maneira de contornar isso?

Quero tornar alguns arquivos/diretórios acessíveis para gravação pelo servidor web.

Responder1

Parece que o usuário que você está executando tem o grupo padrão definido como yuri. Você pode confirmar isso assim:

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

O UID da sua conta é este: uid=1000(saml)enquanto o grupo padrão é git=1000(saml)e quaisquer grupos secundários são posteriores.

OBSERVAÇÃO:Se quiser que o clone do git tenha propriedade específica, você terá pelo menos duas opções.

Opção 1

Defina um diretório pai com as permissões desejadas, assim:

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

Isso forçou o diretório topdira impor todos os diretórios filhos abaixo dele para que o grupo httpfosse aplicado. Isso funcionará em geral, mas pode causar problemas, pois se você mover arquivos para este espaço de trabalho do clone git, esses arquivos não terão seus grupos impostos pelas alterações feitas acima.

Opção 2

Antes de trabalhar, altere seu grupo padrão para httpassim:

$ newgrp http
$ git clone ...

Este método forçará todos os novos arquivos criados a terem seu grupo definido como httpem vez do grupo padrão normal de yuri, mas isso só funcionará enquanto você se lembrar de fazer um newgrpantes de trabalhar neste espaço de trabalho.

Outras opções

Se nada disso parecer aceitável, você pode tentar usar ACLs no diretório do espaço de trabalho git. Eles são discutidos em várias perguntas e respostas neste site, como nestas perguntas e respostas intituladas:Obtendo novos arquivos para herdar permissões de grupo no Linux.

Responder2

A solução que uso éexecute o comando como usuárioque tem as permissões que você deseja manter:

sudo -u user command

Isso evita que as permissões sejam alteradas. Eu o uso ao atualizar repositórios git no meu VPS, enquanto mantenho as permissões de arquivo definidas para o usuário do servidor web.

Veja também a mesma perguntaaqui.

informação relacionada