git commit期间通过git hook 的 pre-commit 修改内容并提交

编程入门 行业动态 更新时间:2024-10-25 16:18:17

git commit期间通过git hook 的 pre-commit 修改内容并提交

  • 背景
  • git hook 介绍
  • 通过 python 自动生成 README.md 目录树脚本

背景

想每次提交代码的时,能自动搜索当前目录下的所有 README.md 生成目录树,并且修改主页展示的README.md。

git hook 介绍

想到了hooks,每次git commit的时,git会主动调用 .git/hooks/pre-commit 这个脚本(默认的*.sample不执行),脚本可以是shell、python、ruby等可执行脚本,只要是 以非零状态 退出会导致中止,就commit失败。

类型触发命令(相同命令按顺序执行)钩子用途
客户端git commitpre-commit提交之前运行,用于检查代码等,非零可以中止过程。加--no-verify可跳过
客户端git commitprepare-commit-msg提交信息编辑器之前,信息被创建之后运行。可以动态插入信息。
客户端git commitcommit-msg接受一个消息参数,可以自动生成提交的消息模版。
客户端git commitpost-commit完成后运行,一般用于通知之类的事情。
客户端git rebasepre-rebase运行git rebase之前,默认的pre-rebase是用来禁止已经推送的提交进行git rebase。
客户端git checkoutpost-checkout运行完成后调用,用于放入大的二进制文件、自动生成文档等。
客户端git mergepre-push验证git控制之外的文件是否存在,可以复制进工作区。
客户端git gc --autopre-auto-gc根据业务是否要中断回收。
客户端替换提交记录的命令触发(git commit --amend、git rebase等)post-rewrite从标准输入中接受重写提交记录。
邮件工作流git amapplypatch-msg确保提交信息符合格式。
邮件工作流git ampost-applypatch提交产生后,用于通知,但无法停止打补丁。
服务器端收到客户端的push后pre-receive可以用来阻止非快进(non-fast-forward)的更新。
服务器端收到客户端的receive后update类似pre-receive,不同于会在每个准备更新的分支各运行一次。
服务器端收到客户端的receive后post-receive完成运行后,用来通知管理员、CI等。

通过 python 自动生成 README.md 目录树脚本

把 pre-commit 文件放置至 .git/hooks/pre-commit,增加可执行权限。

chmod +x .git/hooks/pre-commit

git commit 之前会检查当前目录的所有 README.md 正则取# name描述 生成 directory 树。

主体逻辑介绍:

#获取当前目录的README.md
main_reademe_path = os.path.abspath('.')+'/README.md'
#获取当前目录下的所有README.md
readme_files = allPath(os.path.abspath('.'), main_reademe_path)
#整理按最新排在前面
readme_files.sort(reverse=True)
#整理刚刚倒序的lsit为dict
readme_lists = formatFiles(readme_files)
#递归的生成目录树结构
readme_source = iterdict(readme_lists)
#重写主README.md
replaceFile(readme_source, main_reademe_path)
#git提交主README.md
g = git.cmd.Git(os.path.abspath('.'))
g.add(main_reademe_path)

效果图

参考资料:
https://www.git-scm/docs/githooks

更多推荐

git commit期间通过git hook 的 pre-commit 修改内容并提交

本文发布于:2023-06-14 07:28:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1451309.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内容   commit   git   pre   hook

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!