콘텐츠로 건너뛰기
GitTree
변경 및 커밋

컴퓨터를 떠나기 전에 Git 후크를 사용하여 작업 내용을 확인하세요.

Git 후크는 커밋이나 푸시 직전과 같이 고정된 순간에 Git이 자체적으로 실행하는 스크립트입니다. Preferences › Hooks에서 GitTree은 언제 실행되는지 보여주며, 미리 만들어진 템플릿에서 후크를 추가하고, 편집 및 테스트 실행하고, 끄고 켜고, 저장소를 통해 팀과 공유할 수 있습니다.

무료업데이트됨

GitTree 무료로 작동합니다. 모든 로컬 Git 기능은 계정이 필요하지 않습니다.

이 페이지에서
  1. 시작하기 전에
  2. 어디서 찾을 수 있나요?
  3. 단계
  4. 예상되는 결과
  5. 후크란 무엇이며 왜 사용합니까?
  6. 가장 많이 사용하게 될 후크
  7. 기성 템플릿
  8. 테스트 실행의 역할
  9. 팀과 후크 공유
  10. 한 번의 커밋에 대해 후크 건너뛰기
  11. 뭔가 잘못되면
  12. 질문
  13. 관련된

시작하기 전에

  • 저장소가 열려 있습니다. 후크는 하나의 저장소에 속합니다.
  • 저장소는 신뢰할 수 있습니다. 제한 모드에서는 Git이 후크를 전혀 실행하지 않습니다. 계속해서 읽고 편집할 수 있습니다(저장소 신뢰).
  • 후크는 쉘 스크립트입니다. 템플릿은 macOS, Windows(Git for Windows을 통해) 및 Linux가 모두 제공하는 일반 sh를 사용합니다.

어디서 찾을 수 있나요?

  • 커밋 상자: 커밋 버튼 아래에 May run: … 커밋이 실행하는 후크가 나열됩니다. Manage Hooks 페이지를 엽니다.
  • 툴바의 Tools 또는 왼쪽 패널의 TOOLS 섹션: Git hooks.
  • 저장소 탭의 메뉴 또는 명령 팔레트: Manage Git Hooks… 또는 Alt+Shift+H.
  • Preferences (Mod+,) › Hooks. "후크", "pre-commit" 또는 "husky"에 대한 기본 설정 검색을 통해서도 찾을 수 있습니다.
액션macOSWindows 및 Linux
Git 후크 관리⌥⇧HAlt+Shift+H
환경설정 열기⌘,Ctrl+,

단계

  1. 후크 페이지 열기

    커밋 버튼 아래의 Manage Hooks 또는 Alt+Shift+H를 사용하세요. 여러 저장소가 열려 있는 상태에서 Repository에서 하나를 선택합니다. 페이지는 후크, 3단계 How it works 가이드 및 이 기사에 대한 링크로 시작됩니다.

  2. 언제 실행되는지 읽어보세요.

    What runs when는 커밋 흐름(pre-commit, prepare-commit-msg, commit-msg, post-commit) 및 푸시 흐름(pre-push)을 보여줍니다. 각 단계에는 Runs, Off, Not executable 또는 No hook와 Can stop the action 또는 보고만 표시됩니다.

    루멘에 대한 환경 설정 후크, 실행 시기 및 commit-msg 후크가 실행 불가능으로 표시됨
    이 페이지는 Git이 커밋 및 푸시 시 실행할 수 있는 후크의 이름을 지정하고 공유를 통해 .githooks을 제공합니다.데모 저장소와의 GitTree 인터페이스입니다.
  3. 후크 추가

    Add Hook…를 누르세요. When it runs 아래에서 후크를 선택합니다. Start from에서 Git’s sample 또는 Empty script 템플릿을 선택합니다. Script 미리보기는 작성될 내용을 정확하게 보여줍니다. Create Hook는 실행할 준비가 된 파일을 작성하고 편집기에서 엽니다.

  4. 스크립트 편집

    Edit은 줄 번호가 포함된 스크립트를 엽니다. 변경하고 Save(또는 Mod+S)를 누르세요. 파일을 연 이후 디스크에서 파일이 변경된 경우 GitTree는 파일 덮어쓰기를 거부하고 텍스트를 유지하므로 다시 열고 비교할 수 있습니다.

  5. 테스트 실행해 보세요

    Test Run는 이제 커밋이나 푸시를 하지 않고 Git과 같은 방식으로 후크를 실행합니다. commit-msg 및 prepare-commit-msg에 대해 확인할 메시지를 입력하세요. 출력이 스트리밍되고 결과는 Git이 수행할 작업을 알려줍니다. Passed with exit code 0: Git would continue. 또는 Failed with exit code 1: Git would stop here. Stop는 장기 실행을 종료합니다.

  6. 후크를 끄거나 공유하세요

    후크 옆에 있는 스위치는 이름을 <name>.disabled로 변경하여 후크를 껐다가 다시 켭니다. 아무것도 삭제되지 않습니다. Share Through .githooks는 팀의 저장소에 후크를 배치합니다(아래 참조).

예상되는 결과

다음 커밋 또는 푸시에서 Git은 Runs이라고 표시된 후크를 실행합니다. 커밋 상자의 May run: … 줄은 이름을 지정하고 무언가를 인쇄하거나 커밋을 중지할 때 후크의 출력이 Hook output 아래에 나타납니다.

후크란 무엇이며 왜 사용합니까?

Git은 후크 폴더(core.hooksPath가 달리 명시하지 않는 한 .git/hooks)에서 고정된 이름을 가진 실행 파일을 찾아 일치하는 순간에 실행합니다. pre-commit 또는 pre-push과 같은 작업 이전에 실행되는 후크는 0이 아닌 상태로 종료하여 작업을 중지할 수 있습니다. post-commit 또는 post-merge와 같이 그 뒤에 실행되는 후크는 보고만 할 수 있습니다.

  • 테스트 실패, 보푸라기 오류, 남은 충돌 마커, 대용량 파일 등 컴퓨터를 떠나기 전에 실수를 잡아내세요.
  • 커밋 메시지를 일관되게 유지하세요(예: Conventional Commits 또는 모든 메시지의 문제 키).
  • CI 실행이 실패할 때까지 기다리지 않고 몇 초 안에 피드백을 받으세요.
  • 저장소에 후크를 유지하여 전체 팀에 동일한 검사를 제공하십시오.

가장 많이 사용하게 될 후크

일반적인 클라이언트측 후크
후크Git이 실행될 때일반적인 사용
pre-commit커밋이 생성되기 전준비된 내용에 대한 Lint 및 빠른 테스트 메인에 대한 블록 커밋
prepare-commit-msg메시지가 작성되기 전에메시지에 브랜치 이름의 이슈 키를 입력하세요.
commit-msg메시지가 작성된 후Conventional Commits과 같은 메시지 형식을 확인하세요.
post-commit커밋이 생성된 후통지 또는 기록 커밋을 취소할 수 없습니다
pre-push원격 저장소로 무언가가 전송되기 전에전체 테스트 스위트를 실행하십시오. 보호된 브랜치에 대한 푸시를 거부합니다.
post-merge병합 또는 끌어오기 후잠금 파일이 변경되면 종속성이 다시 설치됩니다.
post-checkout브랜치 전환 후빌드 출력 정리 또는 생성된 파일 새로 고침

pre-receive 및 update와 같은 서버 후크는 푸시를 수신하는 서버에서만 실행됩니다. GitTree는 존재하는 경우 이를 나열하지만 테스트 실행하지는 않습니다.

기성 템플릿

후크 추가의 템플릿
템플릿후크기능
주요 브랜치를 보호하세요pre-commit메인 또는 마스터에서 직접 수행된 커밋을 중지합니다.
충돌 마커 및 공백 잡기pre-commit남은 충돌 마커 또는 후행 공백(git diff --cached --check)을 추가하는 커밋을 중지합니다.
대용량 파일 차단pre-commit5MB보다 큰 파일을 추가하는 커밋을 중지합니다.
이슈 키 추가prepare-commit-msgABC-123과 같은 브랜치 이름의 이슈 키로 각 메시지를 시작합니다.
Conventional Commitscommit-msgfeat(parser): accept empty lines과 같은 요약이 필요합니다.
푸시 전에 테스트 실행pre-pushnpm 테스트, 화물 테스트, go 테스트, pytest 또는 make 테스트를 실행하고 실패할 경우 푸시를 중지합니다.
원격 브랜치 보호pre-push정지는 원격 저장소의 메인 또는 마스터로 바로 푸시됩니다.
종속성 알림post-merge가져오기 또는 병합 후 잠금 파일이 변경된 시기를 나타냅니다.

각 템플릿은 PROTECTED="main master" 또는 TEST_COMMAND=""와 같이 상단에 설정이 있는 일반 스크립트입니다. 프로젝트에 맞게 편집기에서 변경하세요.

테스트 실행의 역할

GitTree는 git hook run을 통해 후크를 실행하므로 Git은 core.hooksPath을 포함하여 실제 작업 중에 하듯이 정확하게 찾아서 시작합니다. 후크는 구성된 입력을 받습니다.

  • pre-commit, pre-merge-commit, post-commit 및 pre-auto-gc: 인수가 없습니다.
  • commit-msg 및 prepare-commit-msg: 입력한 메시지가 포함된 임시 파일이며 나중에 제거됩니다.
  • pre-push: 입력에 분기가 없는 푸시 원격 저장소의 이름 및 URL입니다.
  • post-merge: 0, 일반 병합 후와 같습니다.

팀과 후크 공유

.git/hooks의 후크는 커밋되지 않으므로 각 클론에는 고유한 후크가 있습니다. Share Through .githooks는 이를 저장소의 .githooks 폴더에 복사하고 이 저장소의 구성에서 core.hooksPath를 여기에 설정합니다. 폴더를 커밋합니다. 각 팀원은 복제 후 이를 한 번 실행합니다.

git config core.hooksPath .githooks

Use This Clone’s Own Hooks는 해당 설정을 다시 제거합니다. .githooks 폴더와 .git/hooks의 후크는 그대로 유지됩니다.

한 번의 커밋에 대해 후크 건너뛰기

커밋 상자에서 Commit Options을 열고 Skip Hooks (--no-verify)을 켭니다. 그런 다음 Git은 해당 커밋에 대해 pre-commit 및 commit-msg을 건너뜁니다. prepare-commit-msg 및 post-commit는 여전히 실행 중이며 커밋 버튼 아래 줄에 그렇게 나와 있습니다. 후크를 더 오랫동안 중지하려면 후크 페이지에서 끄십시오.

뭔가 잘못되면

후크는 Not executable을 표시하고 실행되지 않습니다.

macOS 및 Linux에서 Git은 실행 권한 없이 후크 파일을 건너뜁니다. Make Executable을 누르세요. GitTree는 파일을 읽을 수 있는 위치에만 추가합니다.

"디스크가 열린 이후 후크가 변경되었습니다. 새 콘텐츠를 보려면 다시 열어보세요."

다른 프로그램이나 후크 관리자가 파일을 다시 썼습니다. 편집기를 닫았다가 다시 열고 변경 사항을 새 콘텐츠에 적용합니다.

"이 후크는 링크입니다. GitTree는 링크를 통해 쓰지 않습니다. 링크가 가리키는 파일을 편집하세요."

후크는 후크 관리자가 종종 생성하는 기호 링크입니다. 그것이 가리키는 파일이나 해당 도구의 구성을 편집하십시오.

스크립트는 macOS에서 작동하지만 "잘못된 해석기" 또는 \ 오류로 인해 Linux에서 실패합니다.

파일에 Windows 줄 끝(CRLF)이 있습니다. 편집자는 이에 대해 경고합니다. LF 줄 끝으로 스크립트를 저장하십시오.

Test Run은(는) 회색으로 표시됩니다.

그 이유는 버튼 옆에 있습니다. 저장소를 신뢰하거나, 후크를 켜거나, 실행 가능하게 만들거나, 이 후크가 실제 Git 작업 중에만 입력을 받는다는 점에 유의하세요.

질문

후크는 무료 플랜의 일부인가요?

예. 후크 관리, 편집, 테스트 실행 및 공유는 로컬 Git이며 호스팅 계정이 필요하지 않습니다.

후크를 끄면 GitTree에서 후크를 삭제합니까?

아니요. 스위치를 끄면 파일 이름이 <name>.disabled로 변경됩니다. 스위치를 켜면 이름이 다시 변경됩니다. GitTree은 후크를 삭제하지 않습니다.

내가 만든 후크가 커밋되나요?

.git/hooks에 있는 동안에는 그렇지 않습니다. 다른 파일처럼 커밋되는 저장소에 후크를 유지하려면 Share Through .githooks을 사용하세요.

Node.js 또는 Python으로 후크를 작성할 수 있나요?

예. Git은 첫 번째 줄에 있는 프로그램과 함께 파일을 실행합니다(예: #!/usr/bin/env node). 편집기는 해당 프로그램을 Runs with node로 표시합니다. 프로그램은 후크를 실행하는 모든 컴퓨터에 설치되어야 합니다.