당신들의 약속 정보는 틀렸습니다!!(JavaScript의 Git Hooks)
10453 단어 GitJavaScriptgithooksNode.js
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);
}
Reference
이 문제에 관하여(당신들의 약속 정보는 틀렸습니다!!(JavaScript의 Git Hooks)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/delmontz/items/35d39b3d6b53d13c6023
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm install husky --save-dev
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test",
"...": "..."
}
}
}
/* 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);
}
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);
}
Reference
이 문제에 관하여(당신들의 약속 정보는 틀렸습니다!!(JavaScript의 Git Hooks)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/delmontz/items/35d39b3d6b53d13c6023텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)