如何为 git hooks 目录指定新路径?

2023-12-04

我在“Program files”目录中安装了一个 git,并且没有修改它的权限(仅读取)。但我想放一些新的钩子。有办法打电话吗git在命令行中并指定 hooks 目录的新路径?


Git 挂钩是存储库本地的。

创建存储库后(git init yourRepo),你会看到那些钩子yourRepo/.git/hooks.


2016 年 5 月更新 git 2.9(2016 年 6 月)

你有一个新的配置:core.hooksPath

See commit 867ad08, commit de0824e, commit bf7d977, commit 49fa52f (04 May 2016) by Ævar Arnfjörð Bjarmason (avar).
(Merged by Junio C Hamano -- gitster -- in commit 6675f50, 17 May 2016)

core.hooksPath

默认情况下,Git 会在 '$GIT_DIR/hooks' 目录。
将其设置为不同的路径,例如'/etc/git/hooks',Git 会尝试在该目录中找到你的钩子,例如'/etc/git/hooks/pre-receive' 而不是在 '$GIT_DIR/hooks/pre-receive'.

该路径可以是绝对路径或相对路径。相对路径被视为相对于运行钩子的目录

“相对路径”部分来自Git Hooks 手册页:

在 Git 调用钩子之前,它将其工作目录更改为工作树的根目录在非裸存储库中,或者到$GIT_DIR在一个裸存储库中。


原始答案(2014 年 2 月)

您可以指定不同的templatedir (from git config)

init.templatedir

指定要从中复制模板的目录。 (参见“模板目录”部分git-init(1).)

默认模板目录包括一些目录结构,一些建议的“排除模式”,以及样本“hook”文件的副本.
建议的模式和挂钩文件都是可修改和可扩展的。

这意味着一个新的回购协议(git init)将从自定义文件夹而不是默认文件夹(这是 git 安装的一部分)填充默认内容(包括默认示例挂钩)。


Roelant询问评论:

在 git 存储库之外保存 hooks 的用例是什么?

将 Git 挂钩存储在存储库之外对于各种用例都是有益的。

  1. 共享挂钩:

    • 如果您有一组想要在多个存储库之间共享的钩子,那么拥有一个集中的钩子目录可能会很有帮助。通过这种方式,您可以维护每个钩子的单个版本,从而使更新更容易并确保项目之间的一致性。
    • 命令:
      git config --global core.hooksPath /path/to/shared/hooks
      
    • 集中挂钩可以简化维护工作。更新挂钩时,更改将自动适用于使用集中式挂钩目录的所有存储库,而无需单独将更改复制到每个存储库。
    • 在某些组织中,可能有政策或合规性要求来规定如何以及在何处存储和管理挂钩。
  2. 权限控制/安全:

    • 在某些环境中,您可能希望对正在执行的挂钩进行更严格的控制。通过将挂钩放置在存储库外部的目录中,您可以设置必要的权限来控制谁可以添加或修改挂钩。
    • 权限示例 (Unix/Linux):
      chown -R root:root /path/to/shared/hooks
      chmod -R 755 /path/to/shared/hooks
      
    • 将挂钩保留在存储库之外可以作为一种安全措施,以防止有人未经授权访问您的存储库时执行恶意代码。
  3. 版本控制:

    • 您可能希望将钩子与项目代码分开进行版本控制。通过将钩子放在单独的存储库中,您可以使用它们自己的版本控制、问题和拉取请求来管理它们。
    • 为钩子创建一个单独的存储库:
      git init /path/to/shared/hooks
      
+----------------------+      +---------------------+
|   Individual Repo    |      |  Centralized Hooks  |
| (e.g., RepoA, RepoB) |      | Directory           |
+----------------------+      +---------------------+
            |                               |
            | Configure to use              |
            | centralized hooks             |
            +------------------------------>|
                                            |
                                  [Hooks Execution]

通过配置core.hooksPath指向集中式或共享目录,可以有效解决上述场景。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 git hooks 目录指定新路径? 的相关文章

  • 将一个存储库的更改合并到具有不同树结构的另一个存储库

    我有两个 Git 存储库 foo master 和 bar master In foo code root gt dirA gt dirB gt some files In bar code root gt same files as ab
  • GitHub:无法加载最新提交信息

    我实际上是 GitHub 的新手 不太了解它的功能 所以我的问题可能是非常根本的 我用谷歌搜索 也在堆栈溢出中搜索 但没有找到任何解决办法 最近 我分叉了Linux https github com torvalds linux只是为了满足
  • Kdiff3 无法使用 mergetool 命令打开

    我有冲突 所以我输入 git mergetool 然后我收到一条消息说 按回车键启动合并解析工具 通常 当我这样做时 它会打开 kdiff3 以便我可以合并差异 现在 当我这样做时 它只是继续到下一个文件 并且 kdiff3 根本不打开 我
  • 将 Git 子存储库添加到 Mercurial

    我一直在尝试使用 bitbucket 设置一个项目 该项目的项目依赖项托管在 github 上 使用 Hg Git Mercurial 插件我几乎可以做到这一点 但到了推动的时候 事情就变得麻烦了 的文档Mercurial 子存 储库 ht
  • 解决方案具有位于解决方案文件夹外部的项目

    我尝试通过选择将我的解决方案添加到本地存储库File 添加到源代码管理 但我收到以下消息 源代码控制 Git当前解决方案包含位于解决方案文件夹外部的项目 这些项目不会在 Git 存储库中进行源代码控制 要将所有项目添加到单个 Git 存储库
  • 哪种 git commit 实践更好?

    我坚信 对一个问题做出一次承诺是一种很好的做法 我确信我在 最佳实践 之类的文章中读过它 因此 我的工作流程如下 对于新问题 我创建了一个新的本地分支git checkout b new issue 将所有更改提交到其中 有时这涉及到lot
  • Git 提交到公共子模块(主分支)

    我有两个或更多项目 我们称它们为Foo项目 and 项目栏 有一些通用代码我放入了一个子模块 我的理解是 如果我从内部提交对子模块的更改Foo项目它将在一个超然的头脑中 只有所有Foo项目克隆人可以看到 master cd ProjectF
  • libgit2如何获取当前目录的状态?

    如何获取单个目录而不是整个存储库的状态 我查看了以下内容 git status list new它获取存储库状态 但我只关心位于单个目录中的文件 git status file获得单身状态 有没有办法可以使用 libgit2 获取单个目录的
  • 递归地将整个文件夹添加到存储库

    我正在尝试向 GitHub 上的 master 分支添加一个分支 并将一个文件夹推送到该分支上 分支的文件夹结构如下所示 Social App Source Code Dev Trunk Social App 以及所有源代码文件都在最后一个
  • GIT Pull 删除了我的提交

    在 git pull 之后 我已经完成了 git Reset 以在合并之前撤消与提交 ID 的合并 不知何故 我的整个提交都消失了 而且我也无法在历史记录中看到该提交 但我有提交 id 在 git show 命令上我可以看到我的更改 我如何
  • 在 GitHub 上看不到“在 Xcode 中打开”按钮

    正如在GitHub 和 Xcode 9 中的新源代码管理工作流程 https developer apple com videos play wwdc2017 405 time 204Apple 视频会话 我们可以直接从 Xcode 克隆项
  • git pull:无法快进,

    你能帮我解决我的问题吗 当我尝试从 dev 分支拉取时发生错误 我浏览了解决方案 它说我需要 rebase 但它对我来说没有成功 CT aohc MP1GYWQA MINGW64 c TCO source RAPMD Web Fronten
  • 为什么 iTerm2 中不显示 git 颜色

    所以我有我的 gitconfig 设置来处理颜色 在终端中它工作得很好 看起来也不错 然而 在 iTerm2 中 除非我为 git 设置反向属性 否则我的 gitconfig 根本不会显示颜色 然后它们就出现了 但是谁喜欢相反的颜色呢 为什
  • 如何恢复已删除的文件[重复]

    这个问题在这里已经有答案了 可能的重复 在 Git 存储库中恢复已删除的文件 https stackoverflow com questions 953481 restore a deleted file in a git repo 如何恢
  • Git 从不同的存储库中提取分支

    我当前的存储库中只有几个文件 我想合并来自不同存储库的远程分支 从中拉出并合并一个分支github com username code git 分支装载机 然后从中拉出并合并一个分支github com username code git
  • 分支和文件夹的 gitolite 权限

    在 gitolite 我想要 developers能够推送到除以下之外的任何分支master I want user1能够推送到任何分支 包括master 除了不是某个目录master 我该怎么做呢 这应该解决以下两个问题 repo are
  • Git fetch 在 for-each-ref 中不显示远程分支

    我有一个远程分支feature test2 我想把它拿过来 我跑 git fetch origin feature test2 我得到 From
  • 将环境变量从 fastlane 传递到 Xcode 构建阶段脚本

    是否可以 如果可以 如何 将环境变量从运行 fastlane 的脚本传递到 Xcode 运行脚本阶段 我的最终目标是在运行脚本阶段读取当前的 git 分支名称 我们的 CI 由 Team Foundation Server 运行 它执行以下
  • git checkout 裸露,并在接收后包含子模块

    如何在包含子模块的接收后挂钩中检出服务器上的裸存储库 我目前将其作为接收后挂钩 bin bash http blog ekynoxe com 2011 10 22 git post receive for multiple remote b
  • Git 粒度——解决一行内的差异

    git 基于行的粒度或 diff 粒度是否可以增加到单词 字母分辨率 每行多条语句或使用 git 编写纯文本是值得的 根据评论重新阅读问题时 我想我明白了您最初的意思 所以我将给出一个真正的答案 与伊斯梅尔 巴达维的一行评论 https s

随机推荐

  • 我可以在 PHP 中使用 PDO 创建数据库吗?

    我想创建一个使用 PDO 与 MySQL 交互的类 我可以使用 PDO 创建新的 MySQL 表吗 是的你可以 The dsnPart 是 PDO 构造函数的第一个参数 不必有数据库名称 你可以简单地使用mysql host localho
  • `plot.密度` 将“xlim”扩展到我的数据范围之外。为什么以及如何解决它?

    使用下面的代码 我试图获取不同分布的密度图 dens lt apply df c 7 9 12 14 16 18 2 density plot NA xlim range sapply dens x ylim range sapply de
  • 为什么属性在编译期间需要显式键入?

    使用属性语法的编译要求在编译时知道接收器的类型 我可能不明白某些东西 但考虑到 Objective C 是一种动态语言 这似乎是一个损坏或不完整的编译器实现 属性 comment 定义为 property nonatomic retain
  • 在 Javascript 中捕获按键(Google 文档)

    我正在尝试编写一个小greasemonkey 脚本 书签 你有什么Google 文档 我想添加的功能需要一个 keypress keyup keydown 事件处理程序 这三个之一 不幸的是 Javascript 不是我的强项 而且我似乎无
  • 并发块如何运行单个 GPU 流式多处理器?

    我正在研究CUDA编程结构 学习后的感受是 创建块和线程后 每个块都会分配给每个流式多处理器 例如 我使用的是 GForce 560Ti 它有 14 个流式多处理器 因此一次可以将 14 个块分配给所有流式多处理器 但当我浏览一些在线材料时
  • 使用.NET读取Delphi TClientDataset文件

    我需要使用 NET 代码读取使用 Delphi 中的 TClientDataset 类编写的文件 提到的解决方案here对我不起作用 一个不在Windows平台上运行的dotNet程序 对我来说意味着您正在部署 Mono 应用程序 可能在
  • Android:如何从活动堆栈中完全删除活动?

    我有两个活动 FirstActivity 和 SecondActivity FirstActivity 有一个意图过滤器 MAIN LAUNCHER 和 DEFAULT SecondActivity 只是一个普通的 Activity And
  • C++ 数字精度和 fstream 截断

    我有一个包含数百个数字的 file txt 它们在点后有很多数字 最多 20 个 我需要在不截断的情况下获取所有数字 否则它们会在以下计算中引入错误 我用 matlab 生成了这些数字 因此它具有极高的精度 但现在我必须在我的程序中复制这种
  • 从行中选择第 i 个最高值并分配给新列的最快方法

    我正在寻找一种解决方案 将新列添加到现有数据框 数据表中 这是每个单独行中的第 i 个最高值 例如 如果我想要第四个最高值 则新列的第一行将包含 1 9 data lt data frame a c a a b b c a peak1 c
  • C# 自顶向下解析实现

    我想用 c 语言实现自上而下的解析 有没有任何资源可以告诉我方法 我的意思是实现或算法的良好方法和描述 例如 以下是一些实施步骤 1 发展语法2 LL1解析3 构造解析器 这些步骤是按顺序排列的 顺序对于给您正确的答案非常重要 以下 MSD
  • 如何放大和缩小画布中的文本大小,tkinter python

    我创建了一个画布小部件并添加了一些对象 例如矩形和文本 我还在鼠标滚轮上绑定了缩放功能 它适用于矩形 但是 它不适用于文本 我想让缩放也适用于文本 但我找不到方法 任何帮助 将不胜感激 class Layout tk Frame def i
  • 计算图像地图上多边形区域的宽度和高度

    是否可以使用坐标计算图像地图上每个多边形区域的宽度和高度 我有一个图像并使用具有多个不同大小的多边形的图像贴图 我需要找到每一个的中心点 要找到中心点 您需要找到多边形的最小和最大X和Y坐标 然后取每个多边形的中点以获得平均中心点 这是一个
  • 如何使用 C++/CLI 包装器将变量参数从托管传递到非托管?

    要在托管域中实现 params 变量参数 功能 我们在 c cli 中执行以下操作 例如 funcManaged int n array
  • 我可以用jqGrid实现延迟加载吗?

    我有一个包含超过 5000 条数据记录的网格 该数据每天都在增长 当我加载带有网格的页面时 网格几乎需要一分钟才能显示我必须一次显示 10 行的数据 那么是否可以用这个jqGrid实现延迟加载呢 这是我生成 JSON 字符串的操作 Requ
  • Javascript 函数压平多个输入数组

    我正在处理几个对象数组 这些对象将使用 React 渲染到 UI 中 这就是我正在做的事情的背景 我从不同的 API 获取不同的数据集 这些数据集是对象数组的数组 例如 age 23 name john age 24 name jane a
  • Python 组合列表——保留相对顺序

    不知道如何解决这个人 have L1 1 2 3 L2 a b c want 1 a 2 b 3 c import itertools L1 1 2 3 L2 a b c list itertools chain from iterable
  • 反应事件discord.js

    我正在尝试用我的机器人编写右舷代码 其他一切都运行良好 但我试图让机器人忽略实际消息作者的反应 这是我当前的代码 client on messageReactionAdd reaction orig message user gt if m
  • Maven/Surefire 未找到单元测试

    我尝试使用 Maven 创建一个测试项目 单元测试工作正常 但是 当尝试对 j2ee 项目执行相同操作时 surefire 无法找到单元测试 测试位于正确的目录 src test java 中并且正在编译它们 junit 测试位于 src
  • 如何将数据从服务发送到活动?

    我是 Android 开发的初学者 我尝试创建一种 MusicPlayer 它使用服务来播放音乐 当我单击 MainActivity 中的按钮时 我会使用 Intent 调用 startService 其中包含操作信号 例如播放 暂停 停止
  • 如何为 git hooks 目录指定新路径?

    我在 Program files 目录中安装了一个 git 并且没有修改它的权限 仅读取 但我想放一些新的钩子 有办法打电话吗git在命令行中并指定 hooks 目录的新路径 Git 挂钩是存储库本地的 创建存储库后 git init yo