这个git的hook文件具体啥意思,为啥hexo deploy后有这种效果?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个git的hook文件具体啥意思,为啥hexo deploy后有这种效果?相关的知识,希望对你有一定的参考价值。

git --work-tree=/home/www/hexo --git-dir=/home/git/hexo.git checkout -f

git中提供了一组hook,规定了每个hook的名字,以及hook接收的参数个数和每个参数的含义。用户如果要使用hook的话,需要在.git/hooks/目录中创建对应名字的hook文件,赋予该文件可执行权限,用bash或者python或者其它脚本语言来实现该hook具体要做哪些事。hook就是类似于onClick()、onRun()这样的事件,也可以理解成是一组回调函数。


git commit是最常用的命令之一,它可以触发四个hook,分别是pre-commit,prepare-commit-msg,commit-msg和post-commit。从字面上可以猜测到这四个hook分别对应“commit之前”、“准备commit log message的时候”、“生成commit log message的时候”、“commit之后”这四个触发时机。这四个hook也的确是按照这个先后顺序被触发的。如果git commit时使用了-n(等价于--no-verify)参数的话,pre-commit和commit-msg就不会被触发。

pre-commit不接收参数。这个hook可以用来在commit之前检查修改的代码是否符合规范、检查文件名是否含有空格、或者仅仅单纯地输出“hello world”等等,具体想要做什么可以根据实际情况来决定。如果以非0状态退出的话,譬如检测到文件名中有空格,而用户不希望这种文件被commit,在这种情况下执行exit 1,那么git commit会以失败而终止。

prepare-commit-msg接收三个参数。第一个是commit log message所在的文件名,通常是.git/COMMIT_EDITMSG。第二个是commit log message的来源。在《git commit中输入message的几种方式》 中有介绍过-m,不加参数,-c,-C,-F,-t等方式输入commit log message,这些都是不同的来源。如果是-m的话,第二个参数的值是"message";如果是不加参数的话,第二个参数的值是"";如果是-c或-C或者其他情况但加了--amend参数的话,第二个参数的值是"commit";如果是-F的话,第二个参数的值是"message";如果是-t或者设置了commit.template的话,第二个参数的值是"template"。

如果第二个参数不是"commit",那第三个参数值为""。如果第二个参数值是“commit"的话,那第三个参数值就是-c或者-C后面接的那个值,可能是tag name、branch name、HEAD、HEAD^1、具体的某个commit SHA-1等等。有--amend的话,第三个参数值是"HEAD"。

此外,git merge和git cherry-pick可能会触发这个hook。git merge如果是ff(fast-forward) merge那不会触发这个hook,但如果发生no-ff类型的merge,或者git merge --no-ff,那么会触发这个hook,第二个参数值为"merge";git merge --squash && git commit的情况下,第二个参数值为"squash"。git cherry-pick默认情况下会触发这个hook,除非使用了-n(等价于--no-commit)参数,第二个参数值为"message"。

SigmaNEST X1是世界上最好的钣金CAD / CAM系统的新版本,为CNC冲床,激光和等离子机器提供了改进的功能。新的Dynapack-HD嵌套引擎可以更有效地处理多页嵌套任务,从而提供最佳的纸张选择和整体材料成品率的提高。

  新的SigmaNEST X1作为集成多个机器的集线器,通过智能机器编程优化生产计划,减少报废和缩短周期时间。

  我们还推出了SigmaWEB TM,一种新的QuoteNesting TM 解决方案,它允许使用SigmaNEST的工作客户的客户通过Web界面获取工作报价。

  转型制造

  在SigmaTEK,我们的核心价值观是基于诚信,信任,合作,沟通和对完美的热情。我们公司坚持以团队为本,坚持不懈地追求企业文化。

  我们致力于生产优质的产品和优质的服务。我们拥有明确的目标,内部培训和辅导心态,已经开发了钣金和嵌套软件业务中最强大的团队之一。再加上国家的最先进的开发流程和系统,SIGMATEK是理想的位置,以履行其承诺。

  所有这一切,加上业务中最好的客户支持,就是为什么SigmaNEST是世界上安装超过18,000个系统的行业领导者。那个数字不断增长。我们的驱动力,激情和承诺,为您提供业界最好的软件,服务和支持。使用SigmaNEST,您的公司真的可以使用Best®。

  一个支持所有加工机器的嵌套软件

  由业内最先进的CAD / CAM嵌套引擎提供支持,SigmaNEST功能和增强功能使切割机编程在每个行业的每个制造机器上更加有效和更容易

  高级材料处理

  SigmaNEST X1是最全面的工具,提供最终的高级嵌套和先进的运动优化NC编程,以尽量减少废料并提高机器生产率。它为成本优化的过程技术,多供应商环境以及与ERP / MRP集成的广泛接口设定了新的标准。用于普通切割,桥梁切割和链条切割。

  SigmaNEST X1使您能够跟踪工作和残余,以帮助简化生产。SigmaNEST X1适用于所有型材切割机,包括激光,等离子,氧燃料,水刀,路由器和组合机。

  安全的资源,简化您的工作

  SigmaNEST X1是MesserSoft成功产品系列的高端解决方案,也是全球最强大的切割解决方案之一。SigmaNEST X1 由SigmaTEK的SigmaNEST提供支持。凭借其极致的功能,通过简化编程和更高效的机器输出可以节省工程时间。您可以大大减少或消除废料,在更短的时间内处理更多订单,延长机器耗材的使用寿命。

  您的机器吞吐量更快,您的工作流程改善。除了更好地控制库存,您可以从头到尾简化工单跟踪。在精简时间和成本估算之前,精简计划,使您成为业务合作伙伴,您的客户喜欢与之合作。

  最佳职能

  您只需要一个软件来编程所有主要型材切割和冲孔机。您在文件转换和导入方面获得最大的灵活性。挑战性的嵌套和切割任务由SigmaNEST X1自动完成。为了将来使用,您可以将自定义形状保存到标准零件库中。嵌套可提供最大的单张产量。更高水平的连续切割具有最小的穿孔容易达到。为了最大限度地消除残留物,SigmaNEST X1可有效管理您的原材料库存。通过SigmaNEST X1的开放架构,您的系统是完全可定制的。此外,它为用户提供后处理器配置的最大灵活性。
参考技术A 今天分享关于Githooks。

我们主要讲一下它怎么用?有什么用?我用它来做什么。

前端的小伙伴们对Hook这个东西应该都很了解。

Hook的意思就是钩子,用于在执行某个事件之前或之后进行一些其他额外的操作。

Git有很多的事件,如commit/push等,每个事件都有不同的钩子函数。

我们可以在这些钩子函数中执行一些自己想要的操作来满足一些需求。

那么这些钩子函数怎么查到了?

用下面命令:

cd .git/hooks

上图这些带.sample后缀的文件就是对应事件的钩子函数。

随便点开一个文件,里面就详细说明如何使用它。

大概就是将对应文件名去掉后缀名,保留文件,将自己想要实现的操作写在里面就行。

然而,大家都应该知道,这个.git文件是不能提交到仓库中去的。这样一来,如果是多人合作项目,那别人要用就只能复制过去了。

为了解决这个问题。有一个工具出现了。

Husky

它能让配置 Git 钩子变得更简单。

总的来说就是让配置文件和钩子关联起来。
参考技术B 使用hexo搭建了个人博客,放在了github上。
我一直很纳闷儿,为何使用了打包命令hexo d成功后,我的github博客更改(比如添加了文章,更改了样式等)就能成功。
但是使用git status命令,本地更改并没有提交到远程的github啊。。。

”家里就这样一个鼠标适用于这种型号的电脑,坏了的话就得花钱去买,不如让我来修一修。就这样,我把修好鼠标定为目标,找到橱柜里的螺丝刀,又仔仔细细地观察了一遍鼠标,将鼠标的外壳拆卸下来,彻底探究鼠标的内部结构。

这鼠标的主板很小巧,左键与右键的按钮小的可怜,而中间的滑轮却大得夸张。我将主板挪了挪位置,又将外壳扣在上面实验,但鼠标的左右键没有发出熟悉的脆响。我又重复试验了很多次,甚至改动了辅助主板的纸片的位置,但丝毫没有得到什么结果,我甚至是想放弃了。我突然想起老爸曾经修鼠标的画面:“他在主板下面垫了一块比较硬的纸片,就成功地让鼠标恢复了功能。我何尝不效仿一下呢?”我想,“如果说这样对鼠标的修复有用的话,那么鼠标的主板目前应该处于较低的位置,致使外壳上用于按键的零件无法发挥功效,根本够不到按钮。”于是,我撕下一块较硬的纸片,折叠成长方形,用拳头砸实,放在鼠标主板右键的按钮下,将另一块纸片放在左键按钮下,使主板的位置有所提高。

为了测试我的实验是否成功?我又一次把外壳放置在上面,拧上螺丝,点了点左键,有了反应。可是右键依然如故。我把鼠标反过来拍了拍,重新放到鼠标垫上进行实验。我心里默念着“上帝保佑”,谁知老天开眼,鼠标成功恢复,我不禁大喜。
参考技术C 你可以百度一下,查询,找相关技术员

在云服务器上搭建hexo博客(亲测可用)

前言

​ 本来博客是用wordpress在服务器搭建的,但苦于wordpress的后端语言是php,对markdown的支持也不尽如人意,最终还是放弃了wordpress,转战后端为Node的Hexo框架。

整体思路:

  1. 在服务器上配置Git环境,创建Git仓库
  2. 在主机安装Hexo,并生成Hexo静态文件,通过与服务器链接,将静态文件推送到服务器上的Git仓库
  3. 通过Git-hooks,即Git钩子,实现将服务器Git仓库的文件自动部署到网页资源目录
  4. 将Nginx作为静态文件服务器,实现外界对网页资源目录的访问。

本文的配置环境为

  • 天翼云服务器:宝塔面板,一键安装nginx

没有宝塔可以用ssh链接服务器,敲命令行也是一样的yum install nginx

  • 本地主机:Git、Node.js、Hexo

Hexo安装:npm install hexp -g -g意为全局安装。

如果第一次安装node,请注意配置环境变量,否则会出现hexo不是内部或外部命令的问题。

1. 在服务器安装Git

​ 不管是宝塔提供的终端,还是Xshell的命令行都可以,安装命令yum install git

安装git可能会出现这样的报错信息

Loaded plugins: fastestmirror, langpacks

Loading mirror speeds from cached hostfile

No package yum-util available.

Error: Nothing to do

解决方法可参考:安装docker时,遇到Loaded plugins...怎么办

2.在宝塔面板添加站点

​ 由于天翼云服务器在域名没有备案的情况下不开放80端口,所以手动设置一个空闲的32端口用于访问网页。

​ 将网站目录设置为如下(自定义即可)

3.对服务器的Git进行搭建

1. 添加一个git用户

adduser git # 添加git用户
chmod 740 /etc/sudoers #改变sudoers文件的权限为文件所有者可写
vim /etc/sudoers
#在root ALL=(ALL) ALL下方添加一行,按esc,再按:wq退出编辑
git ALL=(ALL) ALL
chmod 400 /etc/sudoers #将sudoers文件的权限改回文件所有者可读

sudo passwd git #设置服务器的git密码,用于git连接。输入时看不到任何显示,输入完成回车即可

2. 给服务器和主机的Git配置SSH密钥

​ 如果主机已有ssh密钥则跳过这一步,直接到C:\\Users\\你的用户名\\.ssh中找到id_rsa.pub。如果没有,按照如下步骤生成密钥:

git config --global user.name "你要设置的名字"
git config --global user.email "你要设置的邮箱"
ssh-keygen -t rsa -C "你刚刚设置的邮箱"

​ 此时主机的git密钥已生成,存放在上述id_rsa.pub文件中。接着,打开宝塔的文件管理系统,在服务器/home/git中新建.ssh文件夹,并在其中新建authorized_keys文件。将主机id_rsa.pub中的内容复制到该新建文件中。

​ 通过配置ssh密钥,主机和服务器的git连接时将不再需要密码,简化了操作。

3.在服务器中创建一个新的Git仓库

cd /home/git
git init --bare hexoblog.git #在/home/git下初始化一个名为hexoblog的仓库

4. 配置钩子实现自动部署

​ 找到/home/git/hexoblog.git/hooks下的post-receive文件,如果没有则新建一个该文件,将其内容改为

#!/bin/sh
git --work-tree=/home/www/mongobin --git-dir=/home/git/hexoblog.git checkout -f

​ 以上内容是一条命令,前者为网页资源目录,后者为git仓库。意为当主机将静态文件推给服务器的git仓库后,服务器能够自动将文件部署到网页资源目录。

然后设置网页资源目录的IO权限,否则git没有权限修改网页资源目录的内容,无法实现自动部署!!!

sudo chmod +x /home/git/hexoblog.git/hooks/pre-receive #赋予其可执行权限
sudo chown -R git:git /home/git/ #仓库目录的所有者改为git
sudo chown -R git:git /home/www/ #站点文件夹所有者改为git

4. 主机配置与测试

1. 在主机初始化博客文件夹并测试本地demo

​ 执行以下命令在文件夹中创建一个新的博客文件夹(官方demo)。

cd D:\\JaBinsProjects\\mongobin
hexo init

然后安装两个插件,用于部署,否则会报错!

npm install hexo-deployer-git --save
npm install hexo-server

​ 执行以下命令即可在本机上查看自己的博客了,地址为localhost:4000

hexo g
hexo s

2.配置本地博客与服务器git的连接

​ 在刚才生成的博客文件夹根目录中找到并打开_config.yml文件,把最下面的depoly处改为如下内容,目的是与服务器git仓库建立连接。

注意:

  • type, repo, branch缩进2格
  • 冒号与其后面的内容必须有一空格
  • branch为master和main均可

3. 测试连接和自动部署是否生效

cd到博客的文件夹下执行以下命令

hexo new "Hello My First Blog"
hexo clean && hexo generate --deploy

也可以在package.json中添加npm脚本,简化操作,这样可以直接用npm run dd部署博客网页

"scripts": 
"build": "hexo generate", // 重新生成静态页面文件
"clean": "hexo clean", // 清除缓存
"deploy": "hexo deploy", // 将静态页面文件部署到服务器
"dd": "hexo clean && hexo g -d",
"server": "hexo server",
"ss": "hexo clean && hexo g && hexo s"
,

然后输入域名www.mongobin.top:32看博客是否更新了一篇文章。

5.最后

​ 完成部署后可以去Hexo主题下载自己喜欢的主题,美化博客。现在去本地主机浏览器上输入域名或者公网IP,访问你的博客吧!

样例博客:唐志远の博客

参考文章

以上是关于这个git的hook文件具体啥意思,为啥hexo deploy后有这种效果?的主要内容,如果未能解决你的问题,请参考以下文章

在云服务器上搭建hexo博客(亲测可用)

hook是啥意思

张量流中使用的钩子是啥意思

说唱hook vears是啥意思

matlab TR = FKINE(ROBOT, Q),Q具体是啥意思,不是已经有个robot对象了吗,为啥还需要参数Q

Thinkphp框架中use Think\Controller是啥意思?为啥在TP框架目录中找不到这个文件夹或者文件