모든 현재 및 향후 repos에 git post-commit 훅 적용


275

Git post-commit hook을 작성했으며 올바르게 작동합니다. 그러나이 후크를 추가하여 현재 작업중 인 모든 현재 및 미래의 자식 리포지토리에 적용하고 싶습니다. ~/.git/hooks/프로젝트 디렉토리의 hooks 디렉토리 대신 후크를 추가하려고 시도했지만 작동하지 않는 것 같습니다.

내 시스템의 모든 리포지토리에 적용 할 전역 Git 후크를 만드는 방법이 있습니까 (각 프로젝트 디렉토리에 복사하지 않고도)? 그렇지 않다면 앞으로 가장 좋은 해결책은 무엇입니까? 아마도 git-init 템플릿입니까?


3
Git 2.9부터 이에 대한 최선의 접근 방식이 변경되었습니다 .VonC의 답변이 더 좋습니다. stackoverflow.com/a/37293198/2741954
Simon Brahan 2016 년

이것이 귀하의 질문에 대답합니까? 기본 git hook 변경
Oliver Sieweke

답변:


192

이 후크를 추가하여 현재 작업중 인 모든 현재 및 미래의 자식 리포지토리에 적용하고 싶습니다.

git 2.9+ (2016 년 6 월)를 사용하면 다음과 같이 할 수 있습니다.

git config --global core.hooksPath /path/to/my/centralized/hooks

" 기본 git hook 변경 "을 참조하십시오 : 이것은 중앙 집중식 hook을 관리하기 위해 수행되었습니다.


내가 기존 리포지토리를 가지고 있고 변경 사항을 가져 오는 다른 모든 개발자가 업데이트 된 사전 커밋 후크를 갖기를 원한다면 어떻게해야합니까? 감사합니다
Richlewis

@Richlewis 당신은 stackoverflow.com/a/40550555/6309 가 완전히 명확하지 않다는 것을 의미 합니까?
VonC

@Richlewis 자신의 로컬 구성에서 참조 할 수 있도록 모든 개발자가 액세스 할 수있는 공유 폴더를 설정해야합니다.
VonC

불행히도 나는 여전히 그것을 얻지 못한다. repo 내에 /.git/hooks/pre_commit내가 그것을 지적 할 수 있습니까?
Richlewis

@Richlewis 나는 당신의 원래 질문에 당신에게 대답했습니다.
VonC

290

git 1.7.1부터 gitconfig에서 init.templatedir 을 설정 하여 git에게 템플릿을 찾을 위치를 알려줄 수 있습니다 .

다음과 같이 설정하십시오.

git config --global init.templatedir '~/.git_template'

이후에 생성하거나 복제 한 새 리포지토리는이 디렉터리를 템플릿으로 사용합니다. 원하는 고리를 넣습니다 ~/.git_template/hooks. 기존 리포지토리는 git init동일한 디렉토리에서 실행하여 적절한 템플릿으로 다시 초기화 할 수 있습니다 .git.

1.7.1 이전의 git 버전의 git init --template ~/.git_template경우 , 나와 비슷 .git_template하고 나머지 도트 파일과 함께 dir 을 관리하려는 경우 running 이 작동 합니다. $GIT_TEMPLATE_DIR환경을 사용 git init하여 템플릿 디렉토리의 위치 를 알 수 있습니다 .


51
좋은 대답입니다. git init기존 리포지토리에서 다시 실행하는지 궁금해하는 사람이 없다면 제거 하지 마십시오 . stackoverflow.com/questions/5149694/…
kontur

나를 위해 기존 리포지토리에서 git init를 사용하여 파일을 복사하기 위해 git 템플릿 폴더의 상대 경로로는 작동하지 않았습니다. 대신 전체 경로를 사용했습니다.
user847988

1
인용문이없는 창 :`git config --global init.templatedir d : \ git \ .git_template \`
Vladimir Vukanac

1
팁 : 템플릿 후크가 복사됩니다. 글로벌 후크를 함께 업데이트하려면 후크를 다른 곳에 놓고 템플리트 디렉토리 (Linux의 경우)에 기호 링크를 추가하십시오. 링크 경로가 절대적인지 확인하십시오.
Tim Allclair

1
달리기 git init는 실제로 후크를 업데이트하지 않았습니다. 이미 존재하는 파일을 덮어 쓰지 않는 것 같습니다. stackoverflow.com/questions/10791486/ . 대신 이전 후크 파일을 먼저 제거해야합니다.
Phil R

69

당신이 (당신 이외의 사용자를 포함하여) 시스템에 모든 곳을 원한다면, 당신은 설치된 템플릿 디렉토리의 내용을 수정할 수 있습니다 - 사람들은에있는 $PREFIX/share/git-core/templates/hooks경우, $PREFIX아마 /usr/local/usr.

이것이 당신을 위해서라면, 가장 간단한 것은 --templategit-init 옵션입니다. 설치하려는 기본 버전 (개별 후크, 정보 디렉토리 ...)에 심볼릭 링크가있는 개인 템플릿 디렉토리를 쉽게 유지 한 다음 사용자 고유의 컨텐츠 hooks/post-commit및 사용자 정의하려는 항목을 쉽게 유지할 수 있습니다.


11
고마워요, 잘 작동했습니다. 그리고 기존 프로젝트에 소급 적용하여 방금 git init다시 실행 하여 새 후크를 추가했습니다.
swanson

이것은 깔끔한 해결 방법이지만 모든 저장소를 변경해야합니다. 이것은 가능하지만 플러그인이나 무언가 (바자에서 수행되는 방식)와 함께 어떤 가능성이 있습니까?
Martin Ueding

2
OS X에서 SourceTree의 내장 된 git의 경우/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
Windows의 경우 git install 디렉토리 아래 mingw64\share\templates\hooks(또는 32 비트의 경우 mingw32)
nerdherd

1
@nerdherd입니다. mingw64\share\git-core\templates\hooks(gfw 2.25)
RJFalconer

7

최소한의 접근 방식은 git_hooks/저장소에 디렉토리 를 작성하여 해당 프로젝트에 대해 작성한 후크를 추적하고에서 언급하여 미래 사용자의 관심을 끌고 README복제 후 올바른 작업을 수행하는 데 의존하는 것입니다. 나는 이것을 잠시 동안 다루었 고 점진적 접근법을 선택했다. 길 아래에서 git-hooks 와 같은 도구를 사용하는 것이 좋습니다.


1
이것은 내가 진정으로 표명 해야하는 실제 솔루션이 아니기 때문에 미안합니다.
Victor Schröder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.