2010-07-02 5 views
7

저는 임베디드 리눅스 프로젝트에서 일하고 있습니다. 빌드 프로세스는 장치에 플래시되는 이미지를 만듭니다. 많은 파일은 시스템이 올바로 작동하기 위해 루트 소유권이 필요합니다. 나는 끌어 내려고 할 때 문제가 발생했다. 그 파일 중 일부는 수정되었다. - git은 그 파일을 쓸 수 없으므로 열심히 리셋하고 sudo를 당긴다. 그런 다음 지점을 전환 할 때 모든 파일에 대해 "연결 해제 할 수 없습니다 ..."라고 말했지만 지점으로 전환하면 지점으로 다시 전환하려고 할 때 로컬 변경 사항이 있기 때문에이를 허용하지 않습니다.git에서 파일 소유권을 어떻게 처리합니까?

그래서 저는 올바르게하고있는 것이 아닙니다. 이 문제를 해결할 올바른 방법은 무엇입니까?

+3

궁금합니다. 왜 파일에 루트 소유권이 필요합니까? 그것없이 무엇이 깰 것이냐? – Amadan

답변

7

원본 파일이 소유자가 무엇이든 상관하지 않도록 시스템을 구조화합니다. git을 통해 권한을 염두에 두지 않고 git에서이 항목을 확인할 수 있습니다 (특히 "owner"는 모든 시스템에서 의미가 없기 때문에).

포함 된 이미지를 생성하려면 모든 항목을 새 디렉터리에 복사하고 다음 필요에 따라 사용 권한을 설정하십시오.

+1

이것은 실제로 구현하기가 쉽다는 것이 밝혀졌습니다. 나는 root 사용자 인 rootlist.txt를 찾았고 rootlist.txt에있는 파일들을 chown하는 스크립트를 만들었다. 루트에 스크립트를 작성한 다음 빌드 스크립트를 호출하고 현재 사용자에게 파일을 다시 chown시킨다. –

+0

파일 이름에 개행 문자가 있으면 이전 주석의 해결책이 실패합니다. find 결과를 null로 구분 된 파일 이름으로 만드는 것이 좋습니다. 이 질문 이후, 나는 대신 Buildroot를 사용하는 것으로 옮겼습니다. 이것은 처음부터 끝까지 설치하는 것보다 훨씬 좋았습니다. –

3

가장 쉬운 방법은 가능한 경우 다른 사용자가 파일을 사용할 수 없도록하기 때문에 루트로 작업 (복제 등)을하지 않는 것입니다.

다른 방법으로 git init --shared을 사용하여 저장소에 대한 공유 (그룹 또는 전체) 권한을 설정 한 다음 git remote add origin http://host/repo.gitgit pull origin master을 입력 할 수 있습니다. 기본적으로 덜 엄격한 사용 권한을 가진 복제본입니다.

1

일부 파일이 chowne '루트 인 이유는 무엇인지 이해할 수 없습니다. 직관적으로 나는 당신의 문제가 소유권에 대한 의존성이 아니라 Git이 소유권을 저장하지 않는다고 생각할 것이다. 당신이 무엇 할 당신의 빌드에 chown입니다.

5

Karmastan의 답변을 바탕으로 작성한 마법 단어는 "빌드 스크립트"입니다.

git의 파일은 배포 버전처럼 보이지 않아도됩니다. .c 파일을 배포하지 마십시오. 먼저 컴파일해야합니다. 마찬가지로 일부 구성 파일은 배포/설치되기 전에 빌드 프로세스를 거칠 수 있습니다.

관련 문제