介绍:https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
--------------------------------------------------------
git 介绍
--------------------------------------------------------
git 介绍
- 参考:https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
- 钩子定义:和其它版本控制系统一样,Git 能在特定的重要动作发生时触发自定义脚本
- 分为客户端和服务器两种
- 客户端钩子由诸如提交和合并这样的操作所调用
- ~ shell .mm
- 服务器端钩子作用于诸如接收被推送的提交这样的联网操作
- 钩子位置: git init 后在.git/hooks中
- 示例脚本,基本是shell,也支持perl。
- 不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或其它语言编写它们。 这些示例的名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀
- 如果使用python脚本直接在代码中声明为#!/usr/bin/python 就可以
- 如果使用python脚本直接在代码中声明为#!/usr/bin/python 就可以
- 把一个正确命名且可执行的文件放入 Git 目录下的 hooks 子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。
- 客户端钩子
- 提交工作流钩子、电子邮件工作流钩子和其它钩子。
- NOTE 需要注意的是,克隆某个版本库时,它的客户端钩子 并不 随同复制。 如果需要靠这些脚本来强制维持某种策略,建议你在服务器端实现这一功能。(请参照 使用强制策略的一个例子 中的例子。)
[popexizhi]只限本地使用,可以定制本地特殊的git策略。
- NOTE 需要注意的是,克隆某个版本库时,它的客户端钩子 并不 随同复制。 如果需要靠这些脚本来强制维持某种策略,建议你在服务器端实现这一功能。(请参照 使用强制策略的一个例子 中的例子。)
- 提交工作流钩子
- pre-commit
- 钩子在键入提交信息前运行
- 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。 如果该钩子以非零值退出,Git 将放弃此次提交
- [popexizhi]一个不错的使用testcase的位置
Git提供的示例脚本pre-commit.sample禁止提交在路径中使用了非ASCII字符(如中文字符)的文件。如果确有使用的必要,可以在Git配置文件中设置配置变量hooks.allownonascii为true以允许在文件名中使用非ASCII字符。Git提供的该示例脚本也对不规范的空白字符进行检查,如果发现则终止提交。 - 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。 如果该钩子以非零值退出,Git 将放弃此次提交
- 【popexizhi:问题使用shell时,pwd测试为空why?】
- 钩子在键入提交信息前运行
- + -
prepare-commit-msg
- 钩子在启动提交信息编辑器之前,默认信息被创建之后运行。 它允许你编辑提交者所看到的默认信息
该钩子接收一些选项:存有当前提交信息的文件的路径、提交类型和修补提交的提交的 SHA-1 校验。 它对一般的提交来说并没有什么用;然而对那些会自动产生默认信息的提交,如提交信息模板、合并提交、压缩提交和修订提交等非常实用。 你可以结合提交模板来使用它,动态地插入信息。
- 钩子在启动提交信息编辑器之前,默认信息被创建之后运行。 它允许你编辑提交者所看到的默认信息
- commit-msg
- post-commit
- 钩子在整个提交过程完成后运行。
- 它不接收任何参数,但你可以很容易地通过运行 git log -1 HEAD 来获得最后一次的提交信息。 该钩子一般用于通知之类的事情。
- pre-commit
- + -
电子邮件工作流钩子
- 它们都是由 git am 命令调用的,因此如果你没有在你的工作流中用到这个命令,可以跳到下一节
- 其它客户端钩子
- 提交工作流钩子、电子邮件工作流钩子和其它钩子。
- 服务器端钩子
- 作为系统管理员,你还可以使用若干服务器端的钩子对项目强制执行各种类型的策略。 这些钩子脚本在推送到服务器之前和之后运行
- pre-receive
- 处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。
-
它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受,
- update
-
update脚本和pre-receive脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次。 假如推送者同时向多个分支推送内容,pre-receive只运行一次,相比之下update则会为每一个被推送的分支各运行一次。
它不会从标准输入读取内容,而是接受三个参数:引用的名字(分支),推送前的引用指向的内容的 SHA-1 值,以及用户准备推送的内容的 SHA-1 值
如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。
-
- + -
post-receive
- post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。 它接受与 pre-receive 相同的标准输入数据
它的用途包括给某个邮件列表发信,通知持续集成(continous integration)的服务器,或者更新问题追踪系统(ticket-tracking system) —— 甚至可以通过分析提交信息来决定某个问题(ticket)是否应该被开启,修改或者关闭。 该脚本无法终止推送进程,不过客户端在它结束运行之前将保持连接状态,所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。
- post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。 它接受与 pre-receive 相同的标准输入数据
没有评论:
发表评论