Git Hook 스크립트를 저장소와 함께 관리 할 수 ​​있습니까?

StackOverflow https://stackoverflow.com/questions/427207

  •  06-07-2019
  •  | 
  •  

문제

우리는 미리 형성 커밋 메시지와 같은 것들을 위해 공유 할 수있는 몇 가지 기본 후크 스크립트를 만들고 싶습니다. git은 일반적으로 아래에 저장된 후크 스크립트가 있습니다. <project>/.git/hooks/. 그러나 사람들이 클론을 할 때 이러한 스크립트는 전파되지 않으며 버전이 제어되지 않습니다.

모든 사람이 올바른 후크 스크립트를 얻는 데 도움이되는 좋은 방법이 있습니까? 해당 후크 스크립트가 내 리포지토리에서 버전 제어 스크립트를 가리키게 할 수 있습니까?

도움이 되었습니까?

해결책

이론적으로, 당신은 a를 만들 수 있습니다 hooks 모든 스크립트가있는 프로젝트 디렉토리에서 디렉토리 (또는 원하는 이름) .git/hooks. 물론, 레포를 클로닝 한 각 사람은이 Symlinks를 설정해야 할 것입니다.

*nix에서 Symlink를 수행하려면 다음과 같습니다.

root="$(pwd)"
ln -s "$root/hooks" "$root/.git/hooks"

사용 ln -sf 당신이 들어있는 것을 덮어 쓸 준비가 되었다면 .git/hooks

다른 팁

~ 안에 git 2.9, 구성 옵션 core.hooksPath 사용자 정의 후크 디렉토리를 지정합니다.

후크를 a로 이동하십시오 hooks 저장소의 추적 디렉토리. 그런 다음 구성하십시오 각 인스턴스 추적을 사용하는 저장소의 hooks 대신에 $GIT_DIR/hooks:

git config core.hooksPath hooks

일반적으로 경로는 절대적이거나 후크가 실행되는 디렉토리와 관련이있을 수 있습니다 (일반적으로 작업 트리 루트; 설명 섹션 참조. man githooks).

프로젝트가 JavaScript 프로젝트이고 사용하는 경우 npm 패키지 관리자로 사용할 수 있습니다 공유-hooks githooks를 시행합니다 npm install.

어때 git hooks, 그것은 경로입니다 .git/hooks Project Directory에서 스크립트로 호출하십시오 githooks.

사본 및 심볼 링크 후크를 모든 곳에서 최소화 할 수있는 기능도 많이 있습니다.

대부분의 최신 프로그래밍 언어 또는 빌드 도구는 GIT 후크를 관리하는 플러그인을 지원합니다. 즉, Package.JSON, POM.XML 등을 구성하는 것만으로도 필요한 모든 사람은 빌드 파일을 변경하지 않는 한 옵션을 준수 할 수 없습니다. 플러그인은 .git 디렉토리에 컨텐츠를 추가합니다.

예 :

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

우리는 사전 및 사후 빌드 이벤트가있는 Visual Studio 솔루션 (및 프로젝트)을 사용하고 있습니다. 'githookdeployer'라는 추가 프로젝트를 추가하고 있습니다. 프로젝트는 포스트 빌드 이벤트에서 파일을 자체 수정합니다. 해당 파일은 빌드 디렉토리에 복사하도록 설정되었습니다. 따라서 프로젝트는 매번 구축되며 건너 뛰지 않습니다. 빌드 이벤트에서는 모든 git 후크가 제자리에 있는지 확인합니다.

물론 일부 프로젝트는 구축 할 것이 없기 때문에 이것은 일반적인 해결책이 아닙니다.

당신은 당신의 후크 폴더를 다른 git 저장소로 만들고 그것을 하위 모드로 연결할 수 있습니다 ... 나는 당신이 많은 멤버와 후크가 정기적으로 바뀌는 경우에만 그만한 가치가 있다고 생각합니다.

사전 커밋 후크 관리를 위해 관리되는 솔루션을 사용할 수 있습니다. 사전 커밋. 또는 서버 측 Git-Hooks와 같은 중앙 집중식 솔루션 datree.io. 다음과 같은 내장 정책이 있습니다.

  1. 감지하고 방지하십시오 비밀의 병합.
  2. 적절한 시행 git 사용자 구성.
  3. 억지로 시키다 Jira 티켓 통합 - 풀 요청 이름 / 커밋 메시지에 티켓 번호를 언급하십시오.

모든 후크를 대체하지는 않지만 모든 개발자 컴퓨터/repo에 후크를 설치하는 구성이없는 개발자로 개발자가 가장 명백한 후크로 도울 수 있습니다.

면책 조항 : 저는 Datrees 설립자 중 하나입니다

pre-commit 사전 커밋 후크를 쉽게 만듭니다. 임의의 GIT 후크 관리에 대한 OP의 질문에 대답하지는 않지만 사전 커밋 후크는 아마도 코드 품질 목적으로 가장 자주 사용됩니다.

이상적으로는 샘플 파일을 따르면 후크는 bash로 작성됩니다. 그러나 사용 가능한 모든 언어로 작성할 수 있으며 실행 가능한 플래그가 있는지 확인할 수 있습니다.

따라서 Python 또는 Go 코드를 작성하여 목표를 달성하고 Hooks 폴더 아래에 배치 할 수 있습니다. 작동하지만 저장소와 함께 관리되지는 않습니다.

두 가지 옵션

A) 다중 스크립트

도움말 안에 고리를 코딩하고 작은 코드 조각을 추가하여 완벽한 스크립트를 호출 할 수 있습니다.

$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js

b) 단일 스크립트

더 멋진 옵션은 여러 스크립트를 추가하여 여러 스크립트 대신 모든 스크립트를 배제하는 것입니다. 그래서, 당신은 후크/mysuperhook.go를 만들고 당신이 원하는 모든 후크를 가리 킵니다.

$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)

매개 변수는 후크가 트리거 된 스크립트를 제공하고 코드 내부에서 차별화 할 수 있습니다. 왜요? 때때로 당신은 예를 들어 커밋과 푸시를 위해 같은 수표를 실행하고 싶을 수도 있습니다.

그리고?

그런 다음 다음과 같은 추가 기능을 원할 수 있습니다.

  • 훅을 수동으로 트리거하여 커밋 또는 밀기 전에 모든 것이 정상인지 확인하십시오. 스크립트를 호출하면 (옵션 A 또는 B)가 트릭을 수행합니다.
  • CI의 후크를 트리거하므로 CI에 대해 동일한 검사를 다시 작성할 필요가 없습니다. 예를 들어 커밋 및 푸시 트리거를 호출합니다. 위와 동일하게 해결해야합니다.
  • Markdown Validator 또는 YAML 유효성 검사기와 같은 외부 도구를 호출하십시오. 당신은 syscall을 만들 수 있으며 stdout과 stderr를 처리해야합니다.
  • 모든 개발자가 후크를 설치하는 간단한 방법을 가지고 있는지 확인하므로 기본 후크를 올바른 후크로 바꾸려면 멋진 스크립트를 저장소에 추가해야합니다.
  • 수표를 차단하기위한 수표와 같은 일부 글로벌 헬퍼를 개발 및 마스터 지점을 마스터하여 모든 저장소에 추가 할 필요가 없습니다. 글로벌 스크립트로 다른 저장소를 사용하여 해결할 수 있습니다.

이것이 더 간단 할 수 있습니까?

예, Git-Hooks를 관리하는 데 도움이되는 몇 가지 도구가 있습니다. 그들 각각은 다른 관점에서 문제를 해결하도록 조정되며, 당신이나 당신의 팀에 가장 적합한 것을 얻기 위해 모든 것을 이해해야 할 수도 있습니다. githooks.com 훅킹에 대한 많은 독서와 오늘날 몇 가지 도구를 제공합니다.

오늘날, GIT 후크를 관리하기위한 다른 전략이있는 21 개의 프로젝트가 나와 있습니다. 일부는 단일 후크, 일부 언어 등을 위해서만 수행합니다.

나에 의해 작성되고 OpenSource 프로젝트로 무료로 제공되는 도구 중 하나는 훅 스4git. 이 책은 파이썬으로 작성되었지만 (마음에 들기 때문에) 아이디어는 위에 나열된 모든 항목을. hooks4git.ini라는 단일 구성 파일로 처리하는 것입니다. .

Git Hooks를 사용하는 것은 절대적으로 환상적이지만 제공되는 방식은 일반적으로 사람들을 멀리합니다.

을 위한 nodejs 사용자는 간단한 솔루션을 업데이트하는 것입니다 package.json ~와 함께

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks", 

그만큼 사전 설치 전에 실행됩니다

NPM 설치

그리고 git을 리디렉션하여 내부의 후크를 찾습니다 . 후크 (또는 선택한 이름) 디렉토리. 이 디렉토리는 모방해야합니다 . . git hooks 파일 이름 (.sample) 및 구조 측면에서.

Maven과 다른 빌드 도구가 사전 설치.

또한 모든 플랫폼에서도 작동해야합니다.

더 많은 정보가 필요하면 참조하십시오 https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top