想在 git 提交 commit 前对文件做校验,有什么好的建议吗

2020-03-02 13:08:16 +08:00
 L00kback

要对文件做校验,逻辑挺复杂的写了一个 py 脚本。想每一个开发者在提交前都自动运行脚本,有什么好的建议吗? 还有个想法,就是把校验程序放服务器,他们提交之前上传一下,自动校验,也是可以的,但是没有开发经验,略懂一些 web,其他不太会,不知有没有什么方法可以参考下。

4261 次点击
所在节点    git
17 条回复
u3u
2020-03-02 13:15:07 +08:00
wenzichel
2020-03-02 13:16:25 +08:00
pre-commit 的 git 钩子,在输入`git commit`后,先指定 pre-commit 指定的脚本,脚本通过后才执行 commit 操作,否则中断
nifury
2020-03-02 13:22:23 +08:00
这个听起来更像 travis-ci 能做的事情,只是 travis-ci 是在 commit 之后做校验的。
不过没通过校验的 commit 会有个红叉,所以应该也满足要求的吧?
L00kback
2020-03-02 13:42:26 +08:00
@u3u
@wenzichel
使用 git hooks,是不是需要要求所有用户在 commit 之前,下载脚本,并且在命令中增加 pre-commit 这一步?这样不太能保证在提交前都做了校验,有些人直接点一下 commit 就交了
wunonglin
2020-03-02 13:43:06 +08:00
其实是可以跳过的,这种东西只能防君子不防小人的
L00kback
2020-03-02 13:50:13 +08:00
@nifury 查了一下,好像可以满足需求,不知道使用过程中会不会有坑,我先再研究研究,有结果的话再来反馈下。非常感谢~
Justin13
2020-03-02 13:52:31 +08:00
看看 husky 这个库行不行。
no1xsyzy
2020-03-02 14:01:45 +08:00
不想被跳过就只有不给 master 写入权限,各人在自己分支上开发完发 PR 或者类似的东西进行合并。
一般还用不到这一层。
crysislinux
2020-03-02 14:19:45 +08:00
pre-commit 给本地检查。服务器上对分支检查,你这肯定不能都直接推 master 了
kaedea
2020-03-02 14:40:37 +08:00
建议弃坑
ExplorerLog
2020-03-02 14:54:39 +08:00
可以在 git server 端做啊

[Server-Side Hooks]( https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90)

pre-receive
ExplorerLog
2020-03-02 14:55:58 +08:00
pre-receive

处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。 它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受。 你可以用这个钩子阻止对引用进行非快进( non-fast-forward )的更新,或者对该推送所修改的所有引用和文件进行访问控制。
DoubleLove
2020-03-02 15:06:18 +08:00
如果是 gitlab 的话,可以在服务端配置,用户每次 push 的时候会触发服务端的 hooks ;
服务端的 hooks 有一个全局的,还可以为每个项目建立单独的 hooks ;
[GitLab DocsAdministrator DocsServer hooks]( https://docs.gitlab.com/ce/administration/server_hooks.html)
[Gitlab 服务器端 custom hook 配置]( https://www.jianshu.com/p/5531a21afa68)
vevlins
2020-03-02 15:59:24 +08:00
本地加一个 husky,仓库加一个 ci
shawndev
2020-03-02 16:19:31 +08:00
server side hooks
ZombieMisaka
2020-03-02 16:24:19 +08:00
我这边是主开发分支没有直接修改权限,只能 mq,各自分支提交后跑脚本检查,不通过的话不允许合并
Torpedo
2020-03-02 16:40:42 +08:00
@L00kback hook 当然可以跳过。我们都是 hook、ci 两道检测。ci 构建不成功是合不进去主干的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX