首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将git钩子重新加载到模板挂钩

如何将git钩子重新加载到模板挂钩
EN

Stack Overflow用户
提问于 2017-08-24 17:52:32
回答 1查看 2K关注 0票数 1

我已经编辑了一些预先存在的钩子,并希望将它们设置为库克隆时的默认设置。当我克隆一个新项目时,我可以看到我的钩子是可用的。因为我不想重新克隆我的所有项目,所以我希望能够将git模板重新加载到现有的项目中。我在git init所在的目录中运行.git,但是钩子从不覆盖我所在的项目中预先存在的钩子。有人知道如何将模板挂钩重新加载到现有的克隆项目上吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 18:34:00

由于.git内部的文件本身没有版本化,而且Git不知道,例如,一些现有的.git/hooks/pre-commit文件实际上是从以前的模板安装的,所以Git不会用更新模板中的新文件覆盖现有的文件。

有一种方法可以解决这个问题,但至少有一次会有点痛苦。这是:在.git/hooks/name中为某些name安装“真实”钩子,而是以.git/hooks/name的形式安装一些直接指向真正钩子的东西。

在Unix系统上,这就像使.git/hooks/name成为指向所需钩子的符号链接一样简单,然后该钩子可以在文件系统中的任何地方驻留。在其他系统中,在.git/hooks/name中必须有一个可执行文件,您可以使.git/hooks/name成为一个单行可执行的shell脚本(通常有两行长),例如:

代码语言:javascript
复制
#! /bin/sh
exec /path/to/real/hook

然后再一次,“真正的”钩子可以住在任何地方。

关于相对路径的边注

这个特殊的例子使用绝对路径。相对路径是可能的,但是你必须小心相对于什么。

如果您可以使用符号链接,您就知道您是相对于.git/hooks目录本身链接的,因此从.git/hooks/pre-commit../../bin/pre-commit的符号链接意味着“some/path/to/.git/hooks/../../bin/pre-commit”,通过路径名代数,假设.git和/或.git/hooks本身不是符号链接,则解析到some/path/to/bin/pre-commit,即工作树中的文件bin/pre-commit。但是,如果您有一个脚本,../相对于脚本的当前工作目录,这与脚本的位置无关。

幸运的是,git rev-parse具有一些非常有用的功能,例如:

代码语言:javascript
复制
git rev-parse --show-toplevel

或者:

代码语言:javascript
复制
git rev-parse --git-dir

它生成顶层工作树和其中的.git目录(作为绝对路径或相对路径,但考虑到运行git rev-parse的进程的当前工作目录)。因此,如果您想在工作树中运行bin/pre-commit文件:

代码语言:javascript
复制
exec $(git rev-parse --show-toplevel)/bin/pre-commit

会成功的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45868052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档