2012-06-11 4 views
1

ACL과 함께 Mercurial의 역학을 이해하는 데 협조 해주십시오.Mercurial ACL은 pull을 방지합니다

우리 팀은 Mercurial을 버전 시스템으로 사용합니다. 설정은 매우 간단합니다 : 두 명의 개발자 (하나의 리눅스, 하나의 윈도우), remote repo (리눅스).

pulling from ssh://[email protected] 
searching for changes 
adding changesets 
transaction abort! 
rollback completed 
abort: stream ended unexpectedly (got 0 bytes, expected 4) 
remote: abort: Permission denied: /repopath/.hg/store/data/paper/tmp.txt.i 
: 때마다, W 검사 수정의 윈도우 사용자와 리눅스 사용자는 L는 (변경된 파일 (들)에 따라) 다음과 같은 오류 메시지가 표시되며, 이후 당겨 싶어

이것은 파일 액세스가 linux의 ACL 목록에 의해 처리되기 때문입니다. setfacl 명령으로 ACL 사용 권한을 수정하면 모든 것이 원활하게 실행되고 L을 가져올 수 있습니다. W이 정확한 권한으로 복제본을 복제하더라도 .hg 디렉토리에있는 (신규/수정 된) 파일에 잘못된 (기본) 권한이 있습니다. repo의 상위 폴더에는 올바른 권한 집합이 있으므로 해당 권한이 상속 된 위치를 모릅니다.

비슷한 문제가 있습니까? 미리 감사드립니다.

답변

1

내 리눅스 박스에서는 그룹 권한을 위해 끈적 끈적한 비트를 설정해야했습니다. 기본적으로 수은 저장소가 될 디렉토리를 만들 때는 chmod g+s <repoDirectory>을 사용해야합니다. 그러면 해당 디렉토리 아래에 만들어진 모든 항목이 파일 생성의 기본값과 관계없이 그룹 구성원에 대해 읽기/쓰기/실행 권한을 갖습니다. ACL 목록 대신 표준 유닉스 그룹을 사용하고 있었기 때문에 이것이 어떻게 효과가 있을지 확신하지 못했습니다.

1

.hg/store에서 새 파일을 만들 때 Mercurial은 .hg/store 디렉토리에서 고전 파일 사용 권한을 복사하고 쓰기 그룹 사용자/그룹을 끈적 끈 그룹 비트 (@Eric Y) 언급했다. 이러한 파일 중 하나를 수정할 때 사용자의 umask이 허용하는 경우 기존 소유권과 사용 권한을 유지합니다.

내 지식으로는 Mercurial은 파일 시스템 수준 ACL을 특별히 처리하지 않습니다. 거의 도구가 없습니다. 따라서 ACL 시스템에는 상속 규칙도 포함됩니다. 여기에는 디렉토리에 자체 ACL이 있으며 default ACL이 상속 된 ACL이 있습니다. 그 디렉토리 안에 새롭게 생성 된 객체들 - 어쩌면 당신은 그 ACL을 설정하는 것 이외에 저장소 default ACL을 조사 할 필요가있을 것입니다.

그렇다면 실제로 ACL을 사용 하시겠습니까? 만약 당신이 이미 그것들을 사용하고 있고 그것들에 익숙하다면 위대한 일이지만 Mercurial에서 2 유저 접근을하기 위해 그들을 파산 시키면 전용 그룹 (developers과 같은)과 끈적 끈적한 그룹 비트 또는 하나의 공유 ssh 계정 인 dev @ unixhost를 각각의 개별 ssh 개인 키와 함께 사용하십시오 (예를 들어 Mercurial wiki의 SharedSSH 페이지 참조).

ACL은 매우 강력하지만 거의 필요하지 않습니다.

다른 독자의 메모 :이 질문에서 우리가 말하는 것은 Mercurial의 ACL 확장과 관련이 없습니다. 이는 Mercurial에 있으며 파일 시스템 ACL 수준의 내용입니다.

0

데비안 기반 시스템 (예 : 우분투)에 대한 릴리즈가 있지만, mercurial-server을 확인해야합니다. Mercurial repos에 대한 액세스 제어를 유연한 방식으로 처리하지만 파일 시스템 ACL 외부에서는 처리합니다.

관련 문제