全局 git 钩子

全局 git 钩子

是否有可能将所有创建 git repo 的方法挂钩?这样我就可以在 repo 被克隆、初始化时运行脚本……(除了移动/复制文件夹之外,还有其他方法吗?)。

我的目的是跟踪所有的存储库,所以我不需要遍历所有目录来运行某些操作(主要是git status因为我有时会忘记提交更改git gc --auto)。

答案1

钩子(当前)是按存储库专门配置的,因此在创建存储库之前不能有活动的钩子。

如果你只想为所有新存储库初始化一些存储库特定的设置,你可能可以使用存储库模板机制

通过使用您自己的模板,您可以

  • 安装激活的钩子(通过提供文件<template‑dir>/hooks/<hook‑name>),
  • 设置配置变量(通过提供<template‑dir>/config文件)
  • 配置每个存储库的排除规则或属性(通过提供<template‑dir>/info/exclude<template‑dir/info/attributes>文件)。

目录中的任何配置文件.git都可以放在模板中,作为从模板初始化的新存储库中该文件的初始副本。我想你甚至可以提供初始对象和引用。

一旦有了包含自定义内容的模板目录,就必须指定git initgit clone的位置。这可以通过选项显式完成--template(Git 0.99.4 或更高版本),或通过环境变量隐式完成(Git 1.5.0 或更高版本),或通过在“全局”(每个用户)或“系统”Git 配置文件中GIT_TEMPLATE_DIR设置配置变量隐式完成(即或(因安装而异);Git 1.7.1 或更高版本)。init.templatedir~/.gitconfig/etc/gitconfig

答案2

您无法“跟踪” git 存储库(如“询问某个中央参考当前活动的 git 存储库列表”)。
每个 git 存储库都独立于另一个 git 存储库。

可以考虑两种解决方案:

  • 一个 git 模板,如 Chris 的回答中所述,其中一个客户端钩子首次使用时,可以在某个“中心”文件中注册 git repo。
    然后该文件将被外部脚本(git 外部)读取,以便生成所需的相关git status内容。git gc

  • 如果你的所有 git 仓库都在同一个公共目录下声明,那么你可以声明一个全局父 git 仓库并将所有子仓库添加为子模块
    自从git1.7.0git status知道子模块何时包含未提交的更改。

相关内容