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. 机器学习算法(四): 基于支持向量机的分类预测(SVM)

    机器学习算法(四): 基于支持向量机的分类预测 本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc 1.相关流程 支 ...

  2. 基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地

    文心大模型,产业级知识增强大模型介绍 官网:https://wenxin.baidu.com/ 项目链接见文末 文心大模型开发套件ERNIEKit,面向NLP工程师,提供全流程大模型开发与部署工具集, ...

  3. 7.3 C/C++ 实现顺序栈

    顺序栈是一种基于数组实现的栈结构,它的数据元素存储在一段连续的内存空间中.在顺序栈中,栈顶元素的下标是固定的,而栈底元素的下标则随着入栈和出栈操作的进行而变化.通常,我们把栈底位置设置在数组空间的起始 ...

  4. Shell常用命令与脚本实例

      #!/bin/sh echo "Hello shell" # ----------------------字符串---------------------# readonly ...

  5. Win12不会取代Win11!真正目标是Google

    Windows 11之后自然应该是Windows 12,但这一次不太一样. 据多个消息源确认,Windows的下一个重大版本将不会是Windows 11的直接升级版,而是更专注于云和Web,同时大力接 ...

  6. 【C语言进阶】atoi函数的模拟实现【C的深度解剖】超详细的解释和注释

    [C语言进阶]atoi函数的模拟实现[C的深度解剖]超详细的解释和注释 那么这里博主先安利一下一些干货满满的专栏啦! 作者: #西城s 这是我的主页:#西城s 在食用这篇博客之前,博主在这里介绍一下其 ...

  7. 安装DNS服务

    实验介绍: DNS的作用 DNS中文名为域名系统 它能实现域名与IP地址的互相转换 域名的命名 www.cnblogs.com 其中.com是网站是顶级域名,.cnblogs是博客园是二级域名,www ...

  8. python高级用法之命名元组namedtuple

    1.tuple类型数据的获取 大家都知道,元组里面的数据获取只能通过下标的方式去获取,比如 :a = ('username', 'age', 'phone'),要获取username的话 ,就需要用a ...

  9. Sunnyui画曲线溢出错误

    之前用sunnyui做展示数据库数据曲线的时候.偶然会报溢出错误,也不报错错误在哪,就是直接程序都跑不动了. 后面发现 设置曲线上下限的时候,当上下限一样的时候就会导致溢出错误.sunnyui的曲线也 ...

  10. CDN缓存的理解

    CDN缓存的理解 CDN即内容分发网络Content Delivery Network,CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时 ...