2010-12-15 4 views
1

현재 디렉토리의 각 하위 디렉토리에 git status과 같은 것을 실행하는 스크립트를 작성 중이므로 여러 git repos에 대한 정보를 신속하게 얻을 수 있습니다. 그러나 repos를 수정하는 명령을 방지하려고합니다. 한 번에 10 개의 레포지를 저 지르지 않을 것입니다. 각 repo에 분기를 보려면 git branch -a을 실행하고 각 repo에 새로운 분기를 생성하려면 git branch new-branch-name을 실행하지 않을 수 있기 때문에 git 하위 명령의 화이트리스트를 사용할 수는 없습니다.git을 읽기 전용 모드로 실행하는 방법이 있습니까?

그렇다면 git을 실행하여 repo에 수정을 가하는 대신 중단하고 읽기 전용 명령을 실행할 때 제대로 작동하도록하는 방법이 있습니까?

편집 : 내가하고 싶은 일은 다음과 같이 작동하는 git-subdirs 명령을 만드는 것입니다. git subdirs COMMAND ARGS을 입력하면 for dir in */; do cd $dir && git COMMAND ARGS && cd ..; done (추가 오류 검사 만 사용)과 같은 작업을 수행하려고합니다. 예를 들어 git COMMAND ARGS이 repo를 수정하는 경우를 제외하고는 다른 repo에서 동일한 변경을 수행하는 것이 거의 불가능하기 때문에이를 수행하고 싶지 않습니다.

+0

페치를 방지 하시겠습니까? 이 스크립트와 같은 매우 일반적인 사용 사례라는 것을 알 수 있습니다.이 스크립트를 repo를 수정하지 않는 것으로 생각할 수도 있지만 분명히 있습니다. – Cascabel

+0

글쎄, 나는 여전히 비파괴 적으로 수정하는 패치 또는 푸시와 같은 명령에 대해 허용 목록을 구현할 수 있지만 잘못 입력 된 명령 하나를 사용하여 10 repos를 실수로 끊을 수있는 기본 구현으로 시작하는 것이 좋습니다. –

+0

사실, push는'-f'를 사용하면 파괴적 일 수 있습니다. 따라서'git branch' 예제와 같습니다. – MatrixFrog

답변

0

I (나는 더 내장 된 "읽기 전용"옵션 힘내에 전달할. 그것은 단순히 일을하려고하고, 권한이있는 경우에, 그 작업을 수행합니다.이 없다는 것을 유의해야 가정) 이것은 unionfs-fuse를 사용하여 구현되었습니다. 이것은 완전히 이식성이 없지만 우분투에서는 저에게 적합합니다. git repos가 모두 들어있는 디렉토리에 git subdirs status으로 시도해보십시오.

Github에서 가져올 수 있습니다. https://github.com/DarwinAwardWinner/git-custom-commands

0

아마도 실제로는 허용 목록을 사용할 수 있습니다. 예 : git-status 대신 git-diff-files와 git-branch를 사용하면 git-show-ref 또는 git-for-each-ref를 사용할 수 있습니다. 저수준 (위생) 명령을 확인하십시오. 스크립트 작성에 필요한 간단한 명령을 찾을 수 있습니다.

+0

배관 명령에 대한 감정은 좋은 생각이지만 때로는 도자기 제품도 갖고있는 것이 좋습니다. 허용 목록은 유지 보수가 상당히 지루할 수도 있지만 유스 케이스에 따라서는 가치가있을 수 있습니다. – Cascabel

1

왜 저장소 디렉토리에 대한 쓰기 액세스를 거부하지 않습니까?

$ chmod -R -w repo.git 
+2

여기서 문제는이 스크립트의 목적이 아닌 repos가 일반적으로 쓰기 가능해야한다는 것입니다. 이 작업은 또한 정말로 어렵습니다. 저장소의 내용 중 일부는 항상 안전을 위해 쓰기 금지되어 있으므로'chmod -R + w' 명령을 실행 취소 할 수 없습니다. – Cascabel

+0

저에게 감사 인사를 해주셔서 감사합니다. 이것이 바로이 솔루션의 문제점입니다. –

+0

한편, unionfs-fuse를 사용하여 나의 repos의 읽기 전용보기를 만들 수 있습니다. –

4

그것은 조금 미봉책입니다,하지만 당신은 단순히 저장소에 쓰기 권한이없는 사용자로 스크립트를 실행할 수 있습니다. 암호를 입력하지 않으려면 ssh 키 쌍과 ssh를 사용하여 사용자로 로그인하십시오. (또는 sudoers를 통해 구성 할 수 있습니까?)

허용 목록과 달리 우발적 인 구멍이나 지나친 제한이없는 것으로 보장됩니다. 실제로 repo의 권한을 수정하지 않아도되며, repo의 사용자 권한 만 수정하면됩니다. 그리고 git-daemon과 같은 추가 설정은 필요하지 않습니다.

+0

정말 -1일까요? 이상적이지는 않을지 모르지만, 이것은 * 작동합니다. – Cascabel

+0

+1 내가 답변을 읽기 전에 내가 생각했던 것 중에 가장 먼저 생각한 것은 이것이 가장 쉽고 위험한 방법이라고 생각합니다. 퓨즈 솔루션은 재미 있지만 잔인한 것처럼 보입니다. – Kelvin