당신들의 약속 정보는 틀렸습니다!!(JavaScript의 Git Hooks)

TL;DR


제출 메시지에 접두사를 붙이면 로그의 검색 효율을 높일 수 있고 보고서를 볼 때 이해하기 쉬우며 접두사 단위로 통일적으로 제출하는 입도 등 장점이 많다.
⬇️
하지만 형식은 그때마다 달랐고 잊어버렸다.(개인 개발은 귀찮지 않다)
⬇️
"Git Hooks"메커니즘을 사용하면 제출 메시지에 대한 형식 확인 및 강제 실행이 가능합니다.
⬇️
온라인 Git Hooks의 예시 코드는 모두 셸 스크립트입니다.😇귀찮아, 모르겠어. 조개 솜씨가 필요해(!?).
⬇️
"husky"를 사용하면 JS도 쉽게 할 수 있어요.
그렇다면!!

접두사


접두사 규칙에 관해서는 아래의 문장을 참고하십시오.
[오늘부터 가능] 제출 정보에'접두사'만 붙이면 개발 효율이 높아집니다.

Git Hooks 정보


제출이나 전송 등을 촉발하여 모든 스크립트를 실행할 수 있는 메커니즘
이번에 소개한 제출 메시지 검사는 이전에 테스트를 실시하고 원본 debuck용 코드(console.log) 등의 잊어버리기 검사 등도 사용할 수 있다.
자세한 내용은 다음을 참조하십시오.
Git 공식 "Git의 사용자 정의 - Git 연결"
여기서 문제는 갈고리 주체다.git 디렉터리 아래에서 프로젝트 구성원 간에 공유할 수 없기 때문!!

husky


위의 문제는 Node입니다.js 프로젝트라면'husky'를 가져오면 간단하게 해결할 수 있습니다.
npm install husky --save-dev 

package.json에 추가


{
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "pre-push": "npm test",
      "...": "..."
    }
  }
}

실천


모든 디렉터리에 원본 파일을 배치하고 호출하기만 하면 된다
제출 메시지를 확인하려면 "commit-msg"에 걸십시오.

제출 메시지는git/COMMIT_EDITMSG 파일의 기재 내용을 확인하면

/* git hoooks commit-msg */
/* コミットメッセージのprefix確認 例: hoge: */
const boxen = require('boxen');
const fs = require('fs');
// プレフィックス一覧
const prefix = ['fix', 'add', 'feat', 'refactor', 'perf', 'style'];

//コミットメッセージ取得、チェック
let git_message = fs.readFileSync('./.git/COMMIT_EDITMSG', 'utf8').trim();
let isMissmatch = !prefix.some(str => {
   let pattern = new RegExp(String.raw`^${str}:\s.*`, 'i');
   return git_message.match(pattern);
});

if(isMissmatch){
   console.error(boxen('☠⚠️コミットメッセージにプレフィックスをつけてね @delmontz  prefix:半角スペース ⚠️️☠', {
      borderStyle: 'double',
      align: 'center'
   }));
   //異常終了 コミット中止
   process.exit(1);
}else{
   //正常終了
   process.exit(0);
}
겸사겸사 말씀드리다
"boxen"을 가져오면 터미널에 이런 느낌으로 표시할 수 있습니다.

경품


흔히'사장님 지점으로 밀어넣었어요.☠️」등등
어떤 지점으로 밀리는 것을 방지하려면 "pre-push"에 걸어 주십시오
const execSync = require('child_process').execSync;
const boxen = require('boxen');

const branch_name = execSync(`git branch --contains`).toString().match(/\* (?:\(no branch, rebasing )?([^)\n]+)/)[1];

if (branch_name === 'master' || branch_name === 'release') {
   console.error(boxen(`☠⚠️⚠️⚠️${branch_name}ブランチにpushしないで!! @delmontz⚠️⚠️⚠️️☠`, {
      borderStyle: 'double',
      align: 'center'
   }));
   //異常終了 push中止
   process.exit(1);
}else{
   //正常終了
   process.exit(0);
}

좋은 웹페이지 즐겨찾기