zoukankan      html  css  js  c++  java
  • git钩子

    定义:
      钩子:由事件触发的函数

    分类:
      客户端钩子:由诸如提交和合并这样的操作触发
      服务器端钩子:由诸如接收被推送的提交这样的联网操作触发

    安装:
      a.钩子都被存储在 .git 目录下的 hooks 子目录中
      b.当 git init 初始化一个新版本库时,默认会在这个目录中放置一些示例脚本
      c.任何正确命名的可执行脚本都可以正常使用(Ruby、Python、shell或其它语言)
      d.这些示例的名字都是以.sample 结尾,如果想启用它们,移除这个后缀就可以了

    客户端钩子:
      提交工作流钩子:
        pre-commit 钩子在键入提交信息前运行
          a.用于检查即将提交的快照,例如,检查是否有所遗漏,核查代码,确认提交权限
          b.如果该钩子以非零值退出,Git 将放弃此次提交
          c.可以用 git commit --no-verify 来绕过这个环节
          
        prepare-commit-msg 钩子在启动提交信息编辑器之前,默认信息被创建之后运行
          a.入参:存有当前提交信息的文件的路径、提交类型和修补提交的提交的SHA-1校验
          b.它允许你编辑提交者所看到的默认信息
          c.对那些会自动产生默认信息的提交可以结合提交模板来使用它,动态地插入信息

        commit-msg 钩子在提交之后运行
          a.入参:存有当前提交信息的文件的路径
          b.如果该钩子以非零值退出,Git 将放弃此次提交
          c.可以在提交通过前验证提交信息

        post-commit 钩子在整个提交过程完成后运行
          a.不接收任何参数
          b.通过 git log -1 HEAD 来获得最后一次的提交信息
          c.一般用于通知之类的事情

      电子邮件工作流钩子:
        a.电子邮件工作流钩子都是由 git am 命令调用
        b.如果需要通过电子邮件接收由 git format-patch 产生的补丁,这些钩子也许用得上

        applypatch-msg 钩子 在git am 运行前被调用
          a.接收单个参数:包含请求合并信息的临时文件的名字
          b.如果脚本返回非零值,Git 将放弃该补丁
          c.可以用该脚本来确保提交信息符合格式,或直接用脚本修正格式错误

        pre-applypatch 钩子 在git am 运行期间被调用
          a.他正好运行于应用补丁之后,产生提交之前,所以可以用它在提交前检查快照
          b.可以用这个脚本运行测试或检查工作区。
          c.如果有什么遗漏,或测试未能通过,脚本以非零值退出,中断 git am 的运行,补丁就不会被提交

        post-applypatch 钩子 运行于提交产生之后
          a.可以用它把结果通知给一个小组或所拉取的补丁的作者
          b.但无法用它停止打补丁的过程

      其他钩子:
        pre-rebase 钩子 变基之前被调用
          a.以非零值退出可以中止变基的过程
          b.可以使用这个钩子来禁止对已经推送的提交变基

        post-rewrite 钩子被那些会替换提交记录的命令调用,
          a.例如git commit --amend 和 git rebase(不包括 git filter-branch)
          b.它唯一的参数是触发重写的命令名,同时从标准输入中接受一系列重写的提交记录
          c.用途很大程度上跟 post-checkout 和 post-merge 差不多。

        post-checkout 钩子在 git checkout 成功运行后会被调用
          a.可以根据你的项目环境用它调整你的工作目录
          b.例如:放入大的二进制文件、自动生成文档或进行其他类似这样的操作。

        post-merge 钩子在 git merge 成功运行后会被调用
          a.可以用它恢复 Git 无法跟踪的工作区数据,例如:权限数据。
          b.可以用来验证某些在 Git 控制之外的文件是否存在,对这些文件进行处理。

        pre-push 钩子在 git push 之前调用。
          a.它接受远程分支的名字和位置作为参数,同时从标准输入中读取一系列待更新的引用
          b.可以在推送开始之前,用它验证对引用的更新操作
          c.一个非零的退出码将终止推送过程

        pre-auto-gc 钩子会在垃圾回收开始之前被调用
          a.git的一些日常操作在运行时,偶尔会调用 git gc --auto 进行垃圾回收。
          b.可以用它来提醒你现在要回收垃圾了,或者依情形判断是否要中断回收。


    说明:克隆某个版本库时,它的客户端钩子 并不 随同复制。 如果需要靠这些脚本来强制维持某种策略,可以在服务器端实现这一功能

    服务器端钩子:
      pre-receive 处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive
        a.它从标准输入获取一系列被推送的引用。
        b.如果它以非零值退出,所有的推送内容都不会被接受
        c.可以用这个钩子阻止对引用进行非快进(non-fast-forward)的更新
        d.可以对该推送所修改的所有引用和文件进行访问控制。

      update
        a.update 脚本和 pre-receive 脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次
        b.假如同时向多个分支推送内容,pre-receive 只运行一次,update 会每一个被推送的分支运行一次
        c.接受三个参数:引用的名字(分支),推送前引用指向的SHA-1值,推送内容的SHA-1值
        d.如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。

      post-receive 在整个过程完结以后运行
        a.可以用来更新其他系统服务或者通知用户,例如:给某个邮件列表发信,通知持续集成的服务器
        b.该脚本无法终止推送进程
        c.不过客户端在它结束运行之前将保持连接状态

  • 相关阅读:
    炒炒饼分锅喂
    奥运会
    360和腾讯QQ共存
    Lenovo F41 使用WinXP不能全屏看Flash格式的电影的解决方法
    如何在Windows server 2003上安装和设置Citrix MetaFrame XP FR3
    “电脑人才”是怎么炼成的
    Lenovo F41 使用WinXP不能全屏看Flash格式的电影的解决方法
    学车
    终于有了自己的本本了
    学车
  • 原文地址:https://www.cnblogs.com/413xiaol/p/7806758.html
Copyright © 2011-2022 走看看