V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
L00kback
V2EX  ›  git

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

  •  
  •   L00kback · 2020-03-02 13:08:16 +08:00 · 4260 次点击
    这是一个创建于 1726 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。 它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受。 你可以用这个钩子阻止对引用进行非快进( non-fast-forward )的更新,或者对该推送所修改的所有引用和文件进行访问控制。
    DoubleLove
        13
    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
        14
    vevlins  
       2020-03-02 15:59:24 +08:00
    本地加一个 husky,仓库加一个 ci
    shawndev
        15
    shawndev  
       2020-03-02 16:19:31 +08:00
    server side hooks
    ZombieMisaka
        16
    ZombieMisaka  
       2020-03-02 16:24:19 +08:00
    我这边是主开发分支没有直接修改权限,只能 mq,各自分支提交后跑脚本检查,不通过的话不允许合并
    Torpedo
        17
    Torpedo  
       2020-03-02 16:40:42 +08:00
    @L00kback hook 当然可以跳过。我们都是 hook、ci 两道检测。ci 构建不成功是合不进去主干的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 00:34 · PVG 08:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.