로컬 Git 다중 사용자 문제

로컬 Git 다중 사용자 문제

RedHat 8 서버에 로컬 Git 버전 제어가 설치되어 있고 이를 실행하면 나와 다른 모든 팀에 대해 루트로 실행을 추가할 수 있는 권한을 git add *요청합니다 .sudosudo git add *

그래서 실행하면 git log변경사항 목록이 표시되지만모든 변화의 변화자는 뿌리이다. 각 사용자가 자신의 자격 증명을 사용하여 실행하도록 하려면 어떻게 해야 합니까?

답변1

git따라서 여기서 일어나는 일은 루트가 아닌 사용자가 액세스할 수 없는 파일을 사용하려고 한다는 것입니다 .

이는 실제 소스 파일이 귀하의 것이 아니거나 .git 디렉토리가 귀하의 것이 아니기 때문일 수 있습니다. 이는 누군가(아마도?)가 .git 디렉토리를 사용하면 분명히 일어날 것입니다 sudo git.

Git은 다중 사용자 저장소 체크아웃에서 작동하지 않습니다.git을 원래 방식으로 사용하면 됩니다.특별히 설계된아니요사용1.

멈춰야 한다현재 사용하는 방식으로 git을 사용하세요. 이로 인해 결국 누군가가 무언가를 깨뜨릴 수 있으며 저장소를 수정해야 합니다. 이것은 최선의 시나리오입니다. 사람들이 당신이 하고 있는 일을 정확히 수행하고 결국 체크아웃에서 추적된 상태를 복구할 수 없게 분리하여 소스 코드가 손실되는 것을 본 적이 있습니다. 이 모든 일은 그들이 단일 공유 저장소 사용을 고집 sudo하고 실제로 저장소를 복제하는 데 30초를 소비하는 대신 로컬로 작업하고 git push업스트림에서 변경을 수행하기 때문에 발생합니다.

Git은 각 사용자가 자신이 100% 소유한 "업스트림" 저장소의 독립적이고 독립적인 복제본을 가질 수 있도록 설계되었습니다. 각 사용자는 자신의 사본을 처리해야 합니다.공유 사본 없음.

"변경 사항을 적용하고 공유 인프라에 적용해야 합니다."와 같은 작업이 필요한 경우 다음을 수행할 수 있습니다.

  1. 서버 어딘가에서 새 사용자(일반적으로 해당 사용자라고 함 git)를 설정한 다음 모든 팀원의 SSH 공개 키를 해당 사용자의 에 추가합니다 $HOME/.ssh/authorized_keys.
  2. 당신은없는새 사용자의 홈 디렉터리인 git init --bare mygitproject.
  3. 스크립트를 다음과 같이 추가합니다.post-receive 자식 후크. 누군가 저장소에 무언가를 푸시하면 Git은 자동으로 스크립트를 실행합니다. 3.1. 예를 들어, 이 스크립트에서는 " main저장소의 분기로 푸시하는 경우 모든 파일을 대상 디렉터리로 체크아웃합니다"와 같은 작업을 수행할 수 있습니다. 예를 들어, git --work-tree=/etc/apache2 checkout maingit에서 apache2 구성을 유지하려는 경우 이 스크립트에서 항목을 찾을 수 있습니다.
  4. 모든 개인 사용자가 git clone자신의 정보를 얻기 위해 사용합니다.현지의그리고내 자신의환매계약서 사본. git commit마침내 그들은 그곳에서 일합니다 git push. 루트/ sudo참여가 전혀 없습니다!

물론 위의 작업은 작은 "지속적 배포"(CD) 환경을 구현하는 것입니다. 푸시할 수 있는 사람 관리 등을 포함하여 이 모든 작업을 수행할 수 있는 더 많은 소프트웨어가 있습니다.포지조그 중 하나입니다.


¹ Git은 소위 말하는 것을 지원합니다.공유 저장소실제로 많은 주의 사항이 있으며 기본 사용자 권한 문제의 결과를 이해하는 것이 엄격히 요구됩니다. 오류를 설명하는 방식으로 볼 때 이것은 실제로 귀하와 귀하의 동료가 처한 상황이 아닙니다. 해당 옵션을 사용하지 말 것을 강력히 권장하며 요청 시 사용법 세부 사항에 대해 자세히 설명하지 않습니다.
공식 Git 매뉴얼에는 다음과 같이 나와 있습니다(내 해석).

할 수 있는그렇게 하는 것은 41년 된 버전 제어 시스템 아키텍처에 익숙하고 새로운 것을 배우는 데 느린 경우 특히 매력적일 것입니다. 하지만아니요이는 누군가가 실수로 모든 것을 파괴하는 것을 방지하는 등 좋은 일만 할 수 있습니다.

관련 정보