리눅스 환경에서 Git pull은 파일의 소유자를 바꾼다


12

git pull라이브 서버에서를 실행할 때마다 파일 소유자가 변경되는 이유는 무엇 입니까? 나는 수동으로 계속하고 있습니다 chown john:john index.php.

을 수행 할 때 git pull파일 소유자가 자동으로 유지 되도록하려면 무엇을 변경해야 john합니까?


1
john현재 디렉토리의 소유자는?
user000001

네, john 디렉토리의 소유자입니다 :)
PinoyStackOverflower

1
어떤 사용자가 실행 중 git pull입니까?
cuonglm

@Gnouc 루트 사용자, 루트 사용자로 SSH를 통해 라이브 서버에 로그인했습니다 :)
PinoyStackOverflower

답변:


11

git pull(와 동등한 git fetch; git merge) 를 사용하면 git은 소유자를 변경하지 않고 파일을 업데이트합니다 (git은 해당 정보를 저장하지 않습니다). 그러나 만들 새 파일이 있으면 현재 사용자가 소유자로 설정됩니다.

이것을 해결하는 다른 해결책이 있습니다. 병합 / 풀 후 자동으로 호출 post-update할 후크 ( .git/hooks디렉토리에) 를 추가하는 것이 더 쉽습니다 chown john:john . -R( 예를 들어 SO 솔루션 참조 ).

대체 솔루션은 다음과 같습니다.

  • git pullroot 대신 john 사용자로 실행하십시오 (.git 디렉토리에 대해 john에 대한 쓰기 권한이 필요함).
  • john을 사용자로 사용하거나 업데이트 후 chown을 수행하는 배치를 작성하기위한 후크를 작성하십시오 ( 맨손 저장소 git pullpost-receive후크 내부에서 수행해야 함 ).

git fetch루트로 로그인 한 다음 git merge사용자 로 로그인 하면 어떻게 됩니까? john은 여전히 .git디렉토리에 대한 쓰기 권한이 필요 합니까?
와일드 카드

예, 대부분입니다. git fetch루트로, .git / objects`의 새 파일은 루트가 소유자 일 수 있습니다. git merge사용자 john은 (대부분) 적어도 덮어 쓰려고 시도 .git/index하고 .git/HEAD(필자는 각 변경 사항에서 삭제 / 생성 될 수 있음)에 파일을 씁니다 .git/objects/. + 작업 디렉토리의 모든 새 파일. 예를 들어 빨리 감기 병합에는 예외가있을 수 있습니다.
Asenar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.