husky 7 的安装,注意下版本

第一步 安装

cnpm install husky@7.0.4 --save-dev

第二步 在package.json script加入

"prepare": "husky install",

第三步 执行下

npm run prepare

第四步 添加hooks

yarn husky add .husky/pre-commit "npm run test"

第五步 进入.husky/pre-commit 写shell脚本

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" git log -2 > a.txt

就一句,把log生成个文件


需求:

git转svn的时候,git信息会丢失,就想每次提交的时候把git的提交记录,弄个文本,放进去,然后打包的时候copy进dist

问题:

每次提交的最新的信息没有

获取不到commit的文本信息

生成的文件,git下又会发现新的变动,导致一直有没提交的文件

最后解决方案:

放弃husky,加个bat,执行下 git log -10 > a.txt,自动构建打包的时候把a.txt放到dist

package.json 里面 scripts 加个

"gitLog": "git log -10 > gitlog.txt",

直接能执行,但是也是有 最后生成文件后,会有文件change问题。


刚又有个新想法,就是在 pre-commit 里面 git add 这个 gitlog.txt 然后自动commit会不会就ok了呢

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" echo "当前git提交时间 $(date "+%Y-%m-%d %H:%M:%S") $1" > gitlog.txt
git log -10 >> gitlog.txt
git add gitlog.txt

解决提交的问题了,现在还有 得不到commit-msg 文字的问题

prepare-commit-msg

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh" echo "2 当前git提交时间 $(date "+%Y-%m-%d %H:%M:%S") " >> gitlog.txt
cat "$1" >> gitlog.txt
git add gitlog.txt

原来$1是文件地址 要用cat读取

msg =$(cat $1)

新的问题是,能读到msg的时候,已经commit完了。郁闷。。

最新总结

pre-commit

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" # <!doctype html><html lang="en"><head><meta charset="utf-8"/></head><body></body></html>
msg="<meta charset=\"utf-8\"/><pre>\n"
msg="$msg husky Recording function: \n"
msg="$msg 1. 记录最后一次commit时间\n"
msg="$msg 2. 记录最后5次commit记录\n"
msg="$msg \n"
msg="$msg 当前最后一次git提交时间 $(date "+%Y-%m-%d %H:%M:%S")\n"
msg="$msg 由于最后一次commit没有记录功能,下面List为第2-6次的git commit提交信息:\n"
echo -e "$msg" > public/gitlog.html
git log -5 >> public/gitlog.html
echo "</pre>" >> public/gitlog.html
git add public/gitlog.html

下面这个废弃了,因为生成文件可以直接放入public目录,这样build自动就copy了。

打包的时候,再copy到dist目录

const fs = require('fs-extra');
fs.copyFileSync('gitlog.txt', 'build/gitlog.html');

最后找的解决方案了!!

pre-commit

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" touch .commit

post-commit

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" # 因为post-commit 是肯定走的hooks 但是 pre-commit是可以取消的,
# 这里就用在 pre-commit 生成一个文件,然后这里再删除,这样就不会进入死循环了。
if [ -e .commit ]; then rm -rf .commit msg="<meta charset=\"utf-8\"/><pre>\n"
msg="$msg husky Recording function: \n"
msg="$msg 1. 记录最后一次commit时间\n"
msg="$msg 2. 记录最后5次commit记录\n"
msg="$msg \n"
msg="$msg 当前最后一次git提交时间 $(date "+%Y-%m-%d %H:%M:%S")\n"
msg="$msg 最后5次的git commit提交信息:\n"
echo -e "$msg" > public/gitlog.html
git log -5 >> public/gitlog.html
echo "</pre>" >> public/gitlog.html
git add public/gitlog.html
git commit --amend -C HEAD --no-verify fi

20211110 更新

问题:多人维护的时候,这个gitlog文件 每次都冲突,改成自己的git用户名

在gitlog目录建立个 index.html 再做几个链接就完了

小瑕疵:$(git config user.name) 想存个变量 再用,但是没有研究出来

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" # 因为post-commit 是肯定走的hooks 但是 pre-commit是可以取消的,
# 这里就用在 pre-commit 生成一个文件,然后这里再删除,这样就不会进入死循环了。
if [ -e .commit ]; then rm -rf .commit msg="<meta charset=\"utf-8\"/><pre>\n"
msg="$msg husky Recording function: \n"
msg="$msg 1. 记录最后一次commit时间\n"
msg="$msg 2. 记录最后5次commit记录\n"
msg="$msg \n"
msg="$msg 当前最后一次git提交时间 $(date "+%Y-%m-%d %H:%M:%S")\n"
msg="$msg 最后5次的git commit提交信息:\n"
echo -e "$msg" > public/gitlog/$(git config user.name).html
git log -5 >> public/gitlog/$(git config user.name).html
echo "</pre>" >> public/gitlog/$(git config user.name).html
git add public/gitlog/$(git config user.name).html
git commit --amend -C HEAD --no-verify fi

20211117 更新

发现vue脚手架 本身自带 gitHooks https://cli.vuejs.org/zh/guide/cli-service.html#git-hook

换成 husky后,就不执行之前的gitHooks了,

之前执行的是 lint-staged,所以要加上

pre-commit 文件更新

#!/bin/sh
. "$(dirname "$0")/_/husky.sh" npm run lint-staged || {
echo
echo "pre-commit hook failed (add --no-verify to bypass)"
exit 1
} touch .commit

package.json 添加script命令

"lint-staged": "lint-staged",

如果不加 可以直接加 node '../node_modules/lint-staged/index.js' 也行,但是我觉得还是执行npm看着更舒服些。

资料

https://www.npmjs.com/package/husky

husky 7.0.4 git hooks 前端 commit 钩子 git转svn [已解决]的更多相关文章

  1. vite vue3 规范化与Git Hooks

    在 <JS 模块化>系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的"四个现代化":工程化.模块化.规范化.流程化.在该系列文章中已详细介绍了模块化的发 ...

  2. 使用Git Hooks实现开发部署任务自动化

    前言 版本控制,这是现代软件开发的核心需求之一.有了它,软件项目可以安全的跟踪代码变更并执行回溯.完整性检查.协同开发等多种操作.在各种版本控制软件中,git是近年来最流行的软件之一,它的去中心化架构 ...

  3. git hooks在业务中的使用

    起因 最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题.项目里application.yml文件内会用@build.time@记录打包时的时间,但是这个写法是build-helper-ma ...

  4. 钩子(hooks)—webhook-使用钩子自动触发部署

    钩子(hooks)-webhook http://fighter.blog.51cto.com/1318618/1670667 https://www.lovelucy.info/auto-deplo ...

  5. git tag、gitignore和git撤销提交

    前言 最近在git的使用过程中遇到了一些新的问题,所以写下来方便自己回忆. git tag 打标签 git tag -a v1.00 -m "注释" git tag 打标签命令 - ...

  6. 012-基于 git hooks 的前端代码质量控制解决方案

    原文看这里:https://github.com/kuitos/kui...全部文章看这里 https://github.com/kuitos/kui... 国际惯例先说下故事背景 通常情况下,如果我 ...

  7. 前端规范之Git工作流规范(Husky + Comminilint + Lint-staged)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  8. [git hooks] pre-commit 配置

    在开发过程中,通常使用 eslint 来规范团队的代码风格.但是 eslint 只能在开发服务器启动的时候才去检验代码.如果一个人在不启动开发服务器的情况下,修改了代码直接提交到git,那么别人pul ...

  9. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  10. git hooks All In One

    git hooks All In One $ xgqfrms git:(main) cd .git/ $ .git git:(main) ls COMMIT_EDITMSG HEAD branches ...

随机推荐

  1. LyScript 寻找ROP漏洞指令片段

    ROP绕过片段简单科普一下,你可以理解成一个可以关闭系统自身内存保护的一段机器指令,这段代码需要我们自己构造,这就涉及到在对端内存搜寻这样的指令,LyScript插件增强了指令片段的查找功能,但需要我 ...

  2. 深入浅出Java多线程(四):线程状态

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第四篇内容:线程状态.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为提升 ...

  3. 基于minsit数据集的图像分类任务|CNN简单应用项目

    Github地址 Image-classification-task-based-on-minsit-datasethttps://github.com/Yufccode/CollegeWorks/t ...

  4. 如何快速获取AWR中涉及到的表

    最近遇到一个很少见的需求,是关于应用测试方面的. 具体来说,这个应用的测试需求要基于一个固定的时间点数据,而且只能测试一轮,再测试就需要还原到测试前状态. 因为我们使用的存储是分层的(热数据在Flas ...

  5. Java注解支持的类型

    我们经常会自定义注解,自定义注解时,可能会需要定义各种数据类型,但是自定义注解可以包含哪些数据类型,是存在限制的. 主要有如下几种: A primitive type : 基本类型(java的八种基本 ...

  6. 关于行结束符(CR、LF)、回车、换行

    CR(Carriage Return)表示回车 LF(Line Feed)表示换行 Dos和Windows采用回车+换行(CR+LF)表示下一行而UNIX/Linux采用换行符(LF)表示下一行苹果机 ...

  7. 那些年我一直在用的高效开发者工具-Typora

    今天跟大家介绍一款我平时一直在用的本地Markdown工具,对比了国内外几款相似工具,Typora简洁.干练.清爽.功能完备特性深深吸引了我.我平时一般用它记录一些学习文章撰写,工作会议内容记录.项目 ...

  8. 从零开始的react入门教程(六),一篇文章理解react组件生命周期

    壹 ❀ 引 学习任何一门框架,无论是vue.react亦或是angular,我们除了需要熟练掌握框架语法外,了解框架自身的生命周期也是至关重要的.一方面生命周期在面试中多多少少总是会提及,其次了解框架 ...

  9. Centos8 单机配置 Zookeeper3.6.3 集群

    安装 Zookeeper 3.6.3 前提 已经安装好 JDK8+. 如果使用JDK8, 版本需要在211以上. 下载, 解压 使用root用户 wget https://downloads.apac ...

  10. NodeJs web项目框架Express笔记

    安装 以下都使用Yarn进行. 环境前提: 已经安装NodeJS(及自带的npm), 已经安装Yarn # 全局安装 yarn global add express-generator@4 #查看版本 ...