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. SpringCloud-05-Gateway

    统一网关Gateway 1.为什么需要网关 网关功能: 身份认证和权限校验 服务路由.负载均衡 请求限流 2.网关的技术实现 在SpringCloud中网关的实现包括两种: gateway zuul ...

  2. 记录开发中element树形控件数据应用在页面上的相关问题

    业务场景 根据后台返回数据生成角色权限的树形结构.获取节点数据后,当父节点被勾选时,所有的子节点全部被勾选,而实际上后台并没有返回当前父节点的所有子节点的ID,所以应该只有部分子节点被勾选. 下面第一 ...

  3. iOS视频播放常用重点知识

    iOS视频播放常见的重要知识点如下: 视频格式:iOS支持的视频格式主要有H.264.MPEG-4.H.263.Sorenson等.它们根据不同的应用场景进行使用. 视频编解码:视频编解码技术是视频播 ...

  4. 一文详解应用安全防护ESAPI

    本文分享自华为云社区<应用安全防护ESAPI>,作者: Uncle_Tom. 1. ESAPI 简介 OWASP Enterprise Security API (ESAPI)是一个免费. ...

  5. docker容器-乌班图安装vim

    apt-get update && apt-get install -y vim

  6. Windows-Xshell对多个终端同时执行命令(发送命令到多个会话)

    方法1:使用查看中的撰(zhuàn)写栏 (1).查看→撰写→撰写栏. (2).底部可以看到"撰写栏",选择全部会话. (3).在撰写栏输入命令,回车后就会发送到所有会话窗口. 方 ...

  7. .NET应用程序7种最常见的性能问题及其解决方案

    译者注:这篇文章依然是介绍.NET Framework框架下的性能问题排查,可能并不直接适用于.NET Core,但有时也能提供一些参考.   .NET应用程序7种最常见的性能问题及其解决方案 原文地 ...

  8. IIS配置跨域

    在IIS里找到HTTP响应标头 添加如下两个标头 Access-Control-Allow-Headers:Content-Type, api_key, Authorization Access-Co ...

  9. Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块

    1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...

  10. 解决iso方式安装win10找不到固态硬盘!!!

    问题说明 朋友的一台联想小新笔记本需要安装win10,我给弄了个iso启动U盘,但是在选择安装盘时找不到笔记本的固态硬盘... 问题原因 联想的锅! 以联想为例,出厂系统的BIOS内,SATA Con ...