git이 끌어올 때 권한과 소유권을 변경하지 못하도록 하는 방법이 있나요?

git이 끌어올 때 권한과 소유권을 변경하지 못하도록 하는 방법이 있나요?

git pull또는 을(를 git reset) 수행할 때마다 git내가 변경한 권한 및 소유권이 재설정됩니다. 직접 확인해보세요:

#!/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

출력:

$ ./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)

이 문제를 해결할 수 있는 방법이 있나요?

웹 서버에서 쓰기 위해 일부 파일/디렉토리에 액세스할 수 있도록 만들고 싶습니다.

답변1

실행 중인 사용자의 기본 그룹이 로 설정된 것 같습니다 yuri. 다음과 같이 확인할 수 있습니다.

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

계정의 UID는 다음과 같습니다. uid=1000(saml)기본 그룹은 git=1000(saml)이고 모든 보조 그룹은 그 이후입니다.

메모:git clone에 특정 소유권을 부여하려면 최소한 2가지 옵션이 있습니다.

옵션 1

다음과 같이 원하는 권한으로 상위 디렉터리를 설정합니다.

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

$ cd topdir
$ git clone ....

이로 인해 디렉터리는 topdir그 아래에 있는 모든 하위 디렉터리에 그룹을 http적용하도록 강제했습니다. 이는 대체로 작동하지만 문제가 발생할 수 있습니다. 파일을 이 git clone 작업 공간으로 이동하면 해당 파일에는 위에서 수행한 변경 사항에 따라 그룹이 적용되지 않기 때문입니다.

옵션 #2

작업을 수행하기 전에 기본 그룹을 http다음과 같이 변경하십시오.

$ newgrp http
$ git clone ...

http이 방법을 사용하면 생성된 모든 새 파일의 그룹 이 일반 기본 그룹 대신 그룹으로 설정되지만 이 작업 공간에서 작업하기 전에 yuri작업을 수행하는 것을 기억하는 경우에만 작동합니다 .newgrp

다른 옵션

둘 중 어느 것도 허용되지 않는 경우 git 작업 공간 디렉터리에서 대신 ACL을 사용해 볼 수 있습니다. 이에 대한 내용은 다음 Q&A와 같이 이 사이트의 여러 Q&A에서 논의됩니다.Linux에서 그룹 권한을 상속할 새 파일 가져오기.

답변2

제가 사용하는 솔루션은사용자로 명령을 실행유지하려는 권한이 있는 항목:

sudo -u user command

이렇게 하면 권한이 변경되지 않습니다. 웹 서버 사용자에게 설정된 파일 권한을 유지하면서 VPS에서 git 저장소를 업데이트할 때 이를 사용합니다.

같은 질문도 참조하세요여기.

관련 정보