내 웹 사이트에서는 Git 상태(주로 현재 커밋 및 브랜치뿐 아니라 git ls-files --modified
서버에서 직접 수정된 모든 파일도 표시)를 보고하므로 최신 상태인지 한 눈에 확인할 수 있습니다. 이전에는 작동했지만 최신 Git에서는 저장소를 소유하지 않은 사용자가 이를 읽는 것을 허용하지 않습니다.
이 명령은 git config --global --add safe.directory {$dir}
원칙적으로 유효하지만아니요작동하지 않아서 작동 www-data
하지 않아서 파일을 만들 $HOME
수 있는 곳이 없습니다 . .gitconfig
응답은 입니다 fatal: $HOME not set
.
Apache가 Git 저장소에 대한 몇 가지 사실을 읽도록 하는 쉬운 방법이 있습니까? 이는 및 와 같은 명령을 exec()
실행하는 데 사용되는 모든 PHP 코드입니다 .git branch --show-current
git log -1 --pretty=%H
답변1
환경변수를 설정할 수 있습니다. 따라서 GIT_CONFIG_GLOBAL
수정된 구성을 가리키도록 설정하면 "no-$home 문제"가 해결됩니다.
를 사용하면 -c key=value
각 통화에 대한 구성 옵션을 개별적으로 설정할 수 git
있으며 이를 통해 원하는 방식으로 작업할 수도 있습니다.
하지만, 어. 개인 파일에 대한 읽기 권한이 있는 사용자로 PHP를 실행하고 있는 것 같습니다! 또는 공유 저장소를 전용 사용자로 실행합니다. 이 경우 해당 사용자로 PHP 인터프리터를 실행하는 것이 더 적절해 보입니다. 또는 Apache를 실행하는 PHP 인터프리터에 개인 파일에 대한 읽기 액세스 권한을 부여합니다. 이것은 기본적으로 공개적인 작업에는 적합하지 않습니다. 실제로 하나의 작업만 수행하는 래퍼 스크립트(예: 올바른 옵션을 사용하여 git을 호출하고 인수로 분기 이름을 전달하는 경우)를 사용하면 이것을 추가하는 것이 더 똑똑해 보입니다. /etc/sudoers 저장소를 소유한 사용자로서 귀하의 PHP가 해당 작업을 수행하기 위해 sudo를 수행할 수 있지만(그리고 해당 작업만 수행할 수 있음) 데이터를 읽을 수는 없습니다.
이 사실을 공개적으로 밝히면 덧붙이고 싶습니다.
exec()
이것은git branch --show-current
다음과 같은 명령을 실행하는 데 사용되는 모든 PHP 코드 입니다.git log -1 --pretty=%H
원격 코드 실행 가능성이 매우 높은 것 같습니다. 이 작업을 수행하는 라이브러리를 사용하는 것이 더 나을 것입니다!