git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
L00kback
V2EX  ›  git

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

  •  
  •   L00kback · Mar 2, 2020 · 4945 views
    This topic created in 2288 days ago, the information mentioned may be changed or developed.

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

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

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