husky(v4, v6)를 사용해야 하나요, 아니면 단순-git-hooks를 사용해야 하나요?

이거 뭐야?


사용husky인지 사용simple-git-hooks인지 판단하기 위해 각종 조사 결과를 정리한 글입니다.

배경.


  • huskyv5를 통해 라이센스 변경 .
  • lint-staged를 설정하는mrm의 의존관계husky부터 단순-git-hooks.로 변경됩니다.
  • huskyv4와 v5의 설정 방식에 큰 변화가 있나...앞으로mrm에 맞춰서 단순-git-hooks를 사용하실래요...🤔

  • huskyv6 라이센스에서 MIT 반환 .
  • mrm가 다시 husky 사용(v6)로 바뀌었다.
  • huskyv4(지금까지의 형식),huskyv6(새로운 형식),simple-git-hooks, 어떤 걸 쓸까...😇
  • 각 라이브러리의 차이점 확인(요약 차이)


    ※ 자신 조사
    husky v4
    husky v5
    husky v6
    simple-git-hooks
    초기 설정npm i {,husky}시 진행
    실행npx husky install<=v5 동일
    실행npx simple-git-hooksgit-hooks 정의 위치
    package.json
    .Husky 아래에 있는 셸 스크립트
    <=v5 동일
    package.json
    git-hooks의 반영 방법
    필요없다
    필요없다
    <=v5 동일npx simple-git-hooks라이선스
    MIT License
    The Parity Public License 7.0.0(OSS의 경우 MIT)
    MIT License
    MIT License
  • huskyv5에서 사용하는 방법에 변화가 생겼다(v6에서도 계속 변경된 사용 방법).
  • huskyv4는 deprecatedv5.0.0 출시 후에도 v4의 무원 임대가 아니다.

  • 처음 봤어The Parity Public License,끼워 넣은 소프트웨어도 공개해야 할 것 같아.즉 상업적 이용은 실질적으로 불가능하다.
  • 각 라이브러리의 차이점 확인(CLI로부터)


    husky v4


    (↓)huskyv4를 설치한 후.git/hooks 밑에 git-hooks용 셸 스크립트를 추가했습니다.
    $ git init husky-v4
    $ cd husky-v4
    $ npm init
    $ npm i husky@4
    $ ls -1 .git/hooks | grep -v .sample
    applypatch-msg
    commit-msg
    husky.local.sh
    husky.sh
    post-applypatch
    post-checkout
    post-commit
    post-merge
    post-rewrite
    post-update
    pre-applypatch
    pre-auto-gc
    pre-commit
    pre-merge-commit
    pre-push
    pre-rebase
    prepare-commit-msg
    push-to-checkout
    sendemail-validate
    
    (↓)는 각git-hooks의 셸 스크립트에서 공통의 셸 스크립트husky.sh를 통해husky-run 실행.
    husky-run에서 package.json 또는 .huskyrc 에 기록된git-hooks용 명령을 실행합니다.
    $ cat .git/hooks/pre-commit
    #!/bin/sh
    # husky
    
    . "$(dirname "$0")/husky.sh"
    

    husky v6


    (↓)huskyv6만 설치하고 특별한 일은 일어나지 않습니다.
    $ git init husky-v6
    $ cd husky-v6
    $ npm init
    $ npm i husky@6
    $ ls -1 .git/hooks | grep -v .sample
    $ cat .git/config
    [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      ignorecase = true
      precomposeunicode = true
    
    (↓)husky v6 usage에서 보듯이 npm prepare를 정의하고husky install를 진행할 때 설정hooksPath = .husky.
    $ npm set-script prepare "husky install" && npm run prepare
    
    # .git/config に `hooksPath = .husky` が追加されている。
    $ cat .git/config
    [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      ignorecase = true
      precomposeunicode = true
      hooksPath = .husky
    
    # hooksPath が指定している .husky ディレクトリ も作成されている。
    $ ls -R .husky
    _
    
    .husky/_:
    husky.sh
    
    # .git/hooks 配下に変化はなし
    $ ls -1 .git/hooks | grep -v .sample
    
    (↓)husky v6 usage처럼 훅을 추가한 후.husky 밑에서 git-hooks용 셸 스크립트를 만듭니다.
    이 셸 스크립트에git-hooks용 명령이 정의되어 있습니다.
    $ npx husky add .husky/pre-commit "npm test"
    husky - created .husky/pre-commit
    
    $ cat .husky/pre-commit
    #!/bin/sh
    . "$(dirname "$0")/_/husky.sh"
    
    npm test
    

    simple-git-hooks


    (↓) 단순-git-hooks만 설치하면 별다른 일이 일어나지 않는다.
    (↓)단순-git-hooks의 usage와 같이 패키지.json에git-hooks를 추가합니다.
    (↓)단순-git-hooks의 usage에 따르다.json 설정을 반영하면git/hooks의 부하에 대응하는git-hooks용 셸 스크립트를 생성합니다.
    이 셸 스크립트에서 패키지.json 내 명령 복사이불
    $ git init simple-git-hooks
    $ cd simple-git-hooks
    $ npm init
    $ npm i simple-git-hooks
    $ ls -1 .git/hooks | grep -v .sample
    

    huskyv6(v5)에서 변경된 이유


    js에서git-hooks에서 명령을 사용하지 않는 이유


    Why husky has dropped conventional JS config
  • v4의 구성에는 과제가 있다.
    모든git-hooks 파일.git/hooks 밑에 설치되어 있기 때문에 불필요한 git-hooks와 node를 실행합니다.
  • git-hooks의 설치를 실현하다.git/hooks와 js 방면에는 두 가지가 있다.
  • Giit2.9에서 도입한core.hooksPath을 사용해 과제를 해결했다.
  • README 상위에 기재된 Modern native Git hooks가 이겁니까?
    native(.git/hooks) 기능을 사용하기 편리한 자물쇠(husky js)를 제거했기 때문에 간단해지는 것은 당연하다.
    v4의 과제(느리고 중복 설치)를 자물쇠로 하는 것도 어쩔 수 없는 단점...
    현재 v4는すべての git-hooks ファイルを .git/hooks 配下に設置이기 때문에 설치가 중복되는 단점을 느끼기 어렵다(js의 업데이트로.git/hooks 측이 따르는 비용)...

    자동 설정을 방지하는 이유


    Why husky doesn't autoinstall anymore
  • installhusky가 설치되었을 때git-hooks가 자동으로 설치되지 않습니다.
  • 대체
  • , 사용npm prepare 집행husky install.
  • 패키지 관리자의 방법이 바뀌었다.
    postinstall은 패키지 관리자인bestpractice
  • 를 컴파일하는 데만 사용됩니다.
  • 패키지 관리자의 캐치 기능을 통해husky가 기대하는postinastall이 실행되지 않는 상황이 나타났다.
  • 패키지 관리자가postinastall에서 로그를 출력하지 않습니다.
  • husky는 예의를 따랐다.
  • 그럼 어떡하지?

  • huskyv4 사용 안 함
  • (자신은 겪지 않았지만) 설치할 때 고장이 발생할 수 있다고 보고한 이상 huskyv4를 적극적으로 사용할 이유가 없다.
  • huskyv6 사용
  • 단순-git-hooks는 안 되는 게 아니야...
  • 양자의 설치는 너무 간단하고 성실한 결정적인 요소가 부족하다...
  • 기대
  • "Husky provides some safe guards"라며 허스키를 사용하기로 했다.
  • hooksPath 혼자서 git-hooks를 설치하는 모드를 사용하는 것도 없지는 않지만,'허스키를 사용했다'는 상태는 다른 사람과 미래의 자신에게도 이해하기 쉽죠...
    이 기사는 t28.dev/should-i-use-husky-or-simple-git-hook/에서 공개된 내용을 복제하거나 복제한 것이다.

    좋은 웹페이지 즐겨찾기