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

9

Sempre que faço git pull ou git reset , git redefine as alterações nas permissões e na 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?

Eu quero tornar alguns arquivos / diretórios acessíveis para escrita pelo servidor web.

    
por x-yuri 11.10.2014 / 10:53

2 respostas

4

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 é o seguinte: uid=1000(saml) , enquanto o grupo padrão é git=1000(saml) e, a partir de então, os grupos secundários.

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

Opção nº 1

Defina um diretório pai com as permissões que você quiser da seguinte forma:

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

$ cd topdir
$ git clone ....

Isso forçou o diretório topdir a impor quaisquer diretórios filhos abaixo dele para que o grupo http fosse aplicado. Isso funcionará em grande escala, mas pode levar a problemas, pois se você mover arquivos para o espaço de trabalho desse git clone, esses arquivos não terão seus grupos impostos pelas mudanças feitas acima.

Opção nº 2

Antes de fazer o trabalho, altere seu grupo padrão para http da seguinte forma:

$ newgrp http
$ git clone ...

Este método forçará todos os novos arquivos criados para terem seu grupo definido como http em vez do seu grupo padrão normal de yuri , mas isso só funcionará se você se lembrar de fazer um newgrp antes de trabalhar nesta área de trabalho.

Outras opções

Se nenhum deles parecer aceitável, você pode tentar usar as ACLs no diretório do espaço de trabalho git. Estes são discutidos em vários Q & A's neste site, como neste Q & A intitulado: .

    
por 11.10.2014 / 11:02
1

A solução que eu uso é para run o comando como o usuário que tem as permissões que você deseja manter:

sudo -u user command

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

Veja também a mesma pergunta aqui .

    
por 15.06.2016 / 02:44