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. java判断系统时间是否在规定的时间区间之内

    java判断系统时间是否在规定的时间区间之内 1️⃣ 创建controller => service => serviceimpl package com.preciouslove.xin ...

  2. KVM环境:Active console session exists for this domain

    做测试过程中被迫换电脑,但没有关掉原电脑的连接,所以用其他电脑连接测试环境时,发现之前的kvm测试环境因没有断开,无法连接: error: operation failed: Active conso ...

  3. IntelliJ IDEA 在电脑上安装多个JDK 切换的方法

    在电脑上来回切换多个版本的JDK进行开发,方法很简单: 1.下载jdk 下载的时候不要下载安装包,而是下载zip包,这样直接解压就可,不污染注册表,难引起其他问题 2.解压后 把JDK配置到IDEA里 ...

  4. 初步体验通过 Semantic Kernel 与自己部署的通义千问开源大模型进行对话

    春节之前被 Semantic Kernel 所吸引,开始了解它,学习它. 在写这篇博文之前读了一些英文博文,顺便在这里分享一下: Intro to Semantic Kernel – Part One ...

  5. 【JS】一个思路搞定三道Promise并发编程题,手摸手教你实现一个Promise限制器

    壹 ❀ 引 之前在整理手写Promise相关资料时,在文章推荐区碰巧看到了一道手写Promise并发控制调度器的笔试题(大厂可能爱考),结果今天同事又正好问了我一个关于Promise调度处理的场景问题 ...

  6. 如何用低代码实现批量导出PDF?

    前言 事情是这样的,熟悉我们的朋友都知道,我司有一个为广大开发者朋友们提供学习帮助的地方,叫做新手训练营,具体的内容就是会针对初次接触葡萄城产品和技术的用户,通过 2-3 天的集中学习,采用直播授课的 ...

  7. Go 和 Colly笔记

    Colly是Go下功能比较完整的一个HTTP客户端工具. 安装 Win10 下载zip包, 直接解压至c:根目录. 如果不打算直接命令行使用, 可以不配置环境变量 Ubuntu 下载tar.gz, 解 ...

  8. Js中数组空位问题

    Js中数组空位问题 JavaScript中数组空位指的是数组中的empty,其表示的是在该位置没有任何值,而且empty是区别于undefined的,同样empty也不属于Js的任何数据类型,并且在J ...

  9. 用ELK分析每天4亿多条腾讯云MySQL审计日志(4)--MySQL全文索引

    前言:        该文章将会介绍以下: 1,MySQL全文索引的使用 2,全文索引停止词STOPWORD 3,使用全文索引的高效和准确 最近事情比较少,刚好可以梳理一下以前的工作,做一下总结! 在 ...

  10. golang中协程&管道&锁

    进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基 本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进 程都有一个自己的地 ...