RedHat 8 서버에 로컬 Git 버전 제어가 설치되어 있고 이를 실행하면 나와 다른 모든 팀에 대해 루트로 실행을 추가할 수 있는 권한을 git add *
요청합니다 .sudo
sudo git add *
그래서 실행하면 git log
변경사항 목록이 표시되지만모든 변화의 변화자는 뿌리이다. 각 사용자가 자신의 자격 증명을 사용하여 실행하도록 하려면 어떻게 해야 합니까?
답변1
git
따라서 여기서 일어나는 일은 루트가 아닌 사용자가 액세스할 수 없는 파일을 사용하려고 한다는 것입니다 .
이는 실제 소스 파일이 귀하의 것이 아니거나 .git 디렉토리가 귀하의 것이 아니기 때문일 수 있습니다. 이는 누군가(아마도?)가 .git 디렉토리를 사용하면 분명히 일어날 것입니다 sudo git
.
Git은 다중 사용자 저장소 체크아웃에서 작동하지 않습니다.git을 원래 방식으로 사용하면 됩니다.특별히 설계된아니요사용1.
너멈춰야 한다현재 사용하는 방식으로 git을 사용하세요. 이로 인해 결국 누군가가 무언가를 깨뜨릴 수 있으며 저장소를 수정해야 합니다. 이것은 최선의 시나리오입니다. 사람들이 당신이 하고 있는 일을 정확히 수행하고 결국 체크아웃에서 추적된 상태를 복구할 수 없게 분리하여 소스 코드가 손실되는 것을 본 적이 있습니다. 이 모든 일은 그들이 단일 공유 저장소 사용을 고집 sudo
하고 실제로 저장소를 복제하는 데 30초를 소비하는 대신 로컬로 작업하고 git push
업스트림에서 변경을 수행하기 때문에 발생합니다.
Git은 각 사용자가 자신이 100% 소유한 "업스트림" 저장소의 독립적이고 독립적인 복제본을 가질 수 있도록 설계되었습니다. 각 사용자는 자신의 사본을 처리해야 합니다.공유 사본 없음.
"변경 사항을 적용하고 공유 인프라에 적용해야 합니다."와 같은 작업이 필요한 경우 다음을 수행할 수 있습니다.
- 서버 어딘가에서 새 사용자(일반적으로 해당 사용자라고 함
git
)를 설정한 다음 모든 팀원의 SSH 공개 키를 해당 사용자의 에 추가합니다$HOME/.ssh/authorized_keys
. - 당신은없는새 사용자의 홈 디렉터리인
git init --bare mygitproject
. - 스크립트를 다음과 같이 추가합니다.
post-receive
자식 후크. 누군가 저장소에 무언가를 푸시하면 Git은 자동으로 스크립트를 실행합니다. 3.1. 예를 들어, 이 스크립트에서는 "main
저장소의 분기로 푸시하는 경우 모든 파일을 대상 디렉터리로 체크아웃합니다"와 같은 작업을 수행할 수 있습니다. 예를 들어,git --work-tree=/etc/apache2 checkout main
git에서 apache2 구성을 유지하려는 경우 이 스크립트에서 항목을 찾을 수 있습니다. - 모든 개인 사용자가
git clone
자신의 정보를 얻기 위해 사용합니다.현지의그리고내 자신의환매계약서 사본.git commit
마침내 그들은 그곳에서 일합니다git push
. 루트/sudo
참여가 전혀 없습니다!
물론 위의 작업은 작은 "지속적 배포"(CD) 환경을 구현하는 것입니다. 푸시할 수 있는 사람 관리 등을 포함하여 이 모든 작업을 수행할 수 있는 더 많은 소프트웨어가 있습니다.포지조그 중 하나입니다.
¹ Git은 소위 말하는 것을 지원합니다.공유 저장소실제로 많은 주의 사항이 있으며 기본 사용자 권한 문제의 결과를 이해하는 것이 엄격히 요구됩니다. 오류를 설명하는 방식으로 볼 때 이것은 실제로 귀하와 귀하의 동료가 처한 상황이 아닙니다. 해당 옵션을 사용하지 말 것을 강력히 권장하며 요청 시 사용법 세부 사항에 대해 자세히 설명하지 않습니다.
공식 Git 매뉴얼에는 다음과 같이 나와 있습니다(내 해석).
너할 수 있는그렇게 하는 것은 41년 된 버전 제어 시스템 아키텍처에 익숙하고 새로운 것을 배우는 데 느린 경우 특히 매력적일 것입니다. 하지만아니요이는 누군가가 실수로 모든 것을 파괴하는 것을 방지하는 등 좋은 일만 할 수 있습니다.