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에서 논의됩니다. 예를 들면 다음과 같습니다.Linux에서 그룹 권한을 상속할 새 파일 가져오기.
답변2
내가 사용한 솔루션은사용자로 명령 실행유지하려는 권한이 있어야 합니다.
sudo -u user command
이렇게 하면 권한이 변경되지 않습니다. 웹 서버 사용자에게 파일 권한을 설정하는 동안 VPS에서 git 저장소를 업데이트할 때 이것을 사용합니다.
같은 질문도 참조하세요여기.