프로젝트 저장소에 .git/hooks (예 : 심볼 링크 사용)를 넣는 것은 좋지 않은 것으로 간주됩니까? 그렇다면 동일한 git 사용자에게 동일한 후크를 전달하는 가장 좋은 방법은 무엇입니까?저장소에 git 후크 넣기
답변
아니요, 저장소에 저장하는 것은 괜찮습니다. 다른 사람에게도 유용하다면 그렇게하는 것이 좋습니다. 사용자는 명시 적으로 (예를 들어, 심볼릭 링크로 말한 것처럼) 한편으로는 통증을 느끼지 만 다른 사용자는 동의없이 임의의 코드를 실행하지 못하도록 보호해야합니다.
나는 일반적으로 Scytale에 동의하며 몇 가지 추가 제안 사항 만 있으면 충분합니다.
먼저, 특히 이러한 훅이 정책을 적용하거나 유용한 알림을 만드는 것과 관련되어있는 경우 적절한 심볼릭 링크를 만드는 스크립트를 작성해야합니다. 사람들이 직접해야하는 것보다 bin/create-hook-symlinks
을 입력하면 갈고리를 사용할 확률이 훨씬 높아집니다.
두 번째로 직접 기호 링크는 사용자가 자신의 개인 후크에 추가 할 수 없게합니다. 예를 들어 필자는 공백 오류가 없는지 미리 확인하는 샘플 프리 훅을 좋아한다. 이 문제를 해결하는 가장 좋은 방법은 repo에 hook wrapper 스크립트를 넣고 심볼릭 링크 에 후크를 끼워 넣는 것입니다. 그러면 래퍼는 $0
(bash 스크립트라고 가정하고 다른 경우는 argv[0]
과 같은 의미)을 검사하여 해당 호크가 호출 된 후 해당 호크를 호출하고 적절한 사용자의 후크를 호출 할 수 있습니다. 모든 인수를 각각 전달하여 이름을 바꿀 수 있습니다. 메모리에서 빠른 예 :
#!/bin/bash
if [ -x $0.local ]; then
$0.local "[email protected]" || exit $?
fi
if [ -x tracked_hooks/$(basename $0) ]; then
tracked_hooks/$(basename $0) "[email protected]" || exit $?
fi
설치 스크립트는 위의 스크립트에 알려진 모든 후크 이름을 측면 (자신의 이름을 .local
를 추가) 모든 기존의 후크를 이동하고 심볼릭 링크 것이다 :
#!/bin/bash
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
# assuming the script is in a bin directory, one level into the repo
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
for hook in $HOOK_NAMES; do
# If the hook already exists, is executable, and is not a symlink
if [ ! -h $HOOK_DIR/$hook -a -x $HOOK_DIR/$hook ]; then
mv $HOOK_DIR/$hook $HOOK_DIR/$hook.local
fi
# create the symlink, overwriting the file if it exists
# probably the only way this would happen is if you're using an old version of git
# -- back when the sample hooks were not executable, instead of being named ____.sample
ln -s -f ../../bin/hooks-wrapper $HOOK_DIR/$hook
done
템플릿 디렉토리 파일과 직접이 포함 http://git-scm.com/docs/git-init#_template_directory에서
, 각 새로 생성 된 자식의 repo의 .git/후크 디렉토리를 업데이트 이러한 메커니즘 중 하나를 사용할 수 있습니다 ory는 이 생성 된 후 $ GIT_DIR에 복사됩니다.
템플릿 디렉토리 중 하나가 될 것입니다 (순서대로) 다음
--template 옵션으로 주어진 인수를;
$ GIT_TEMPLATE_DIR 환경 변수의 내용.
init.templateDir 구성 변수; 또는
기본 템플릿 디렉토리는/usr/share/git-core/templates입니다.
"이러한 메커니즘 중 하나를 사용할 수는 있지만"하나만 지정하십시오. – Otheus
https://www.npmjs.com/package/pre-commit NPM 패키지는이 우아하게 당신이 당신의 package.json에 사전 커밋 후크를 지정할 수 처리합니다.
- 1. DICOM 파일을 저장소에 넣기
- 2. Git 후크 - 원격 저장소에서 전파 중입니까?
- 3. 메타 데이터 저장/검색 용 Git 후크
- 4. 파일을 원격 git 저장소에 푸시
- 5. Git/Mercurial에서 밀어 넣기 금지
- 6. GIT 후크 후 수신 및 원격 저장소 git pull
- 7. git init 템플릿, 수정 된 후크 교체하기
- 8. Git-git gitignore 디렉토리에 추가
- 9. 공유 저장소에 자식 (Git) 커밋 수정하기
- 10. git 저장소에 과거를 추가하는 방법은 무엇입니까?
- 11. SVN 작업 사본을 Git 저장소에 복사합니다.
- 12. 원격 Git 저장소에 새로운 커밋 표시
- 13. 어떻게 GIT 저장소에 대한 사용자 권한을 설정합니까?
- 14. git 저장소에 디렉토리를 커밋하는 방법은 무엇입니까?
- 15. 별도의 git 저장소에 하위 디렉토리 디커트 -
- 16. 새 앱을 기존 Git 저장소에 푸시
- 17. 방화벽 뒤에서 ssh를 통해 git 저장소에 액세스
- 18. 은 git 저장소에 한 번만 파일을 포함합니다.
- 19. svn 저장소에 git 하위 디렉토리가 있습니까?
- 20. Git : 저장소에 알려진 저장소를 저장할 수 있습니까?
- 21. Git 저장소에 SVN 원격을 어떻게 추가합니까?
- 22. 맨 저장소에 푸시 된 git 브랜치를 찾으십시오.
- 23. .git 폴더를 내 SVN 저장소에 저장해야합니까?
- 24. git 다른 메인 저장소에 하위 디렉토리를 푸시
- 25. 기본적인 git hook 이해하기
- 26. 후크
- 27. 응용 프로그램을 시작하기 전에 에뮬레이터 외부 저장소에 파일 넣기
- 28. Netbeans 프로젝트를 Eclipse로 옮겨서 동일한 SVN 저장소에 넣기
- 29. 특정 지점을 처리하기 위해 git post-receive 후크 작성하기
- 30. 로컬 커밋 중에 자동으로 코드를 수정하는 git 후크 작성
회사 정책 일 경우 코드가 "임의"가 아니므로 이는 필수 코드이므로 GIT에서 제한 사항으로 간주되며 추적되는 다른 (미리 정의 된) 디렉토리가없는 경우, 또한 일반 훅과 함께 실행 됨 –
자동으로 훅을 전달하는 것은 보안상의 문제입니다. Git이 직접 팀/회사 정책을 시행하거나 서버 측에서 훅을 사용하거나 사용자가 수동으로 결정할 수있게 해준 것을 기쁘게 생각합니다. @cy가 설명하는대로 사용 가능하게 설정하십시오. –
"사용자가 동의없이 임의의 코드를 실행하지 못하게합니다". 개발자가 제안한대로 (symlinking)하면 다른 사람이 후크를 변경하고 "동의없이 임의의 코드를 실행" – MiniGod