【问题标题】:Create global pre-commit hooks for entire team为整个团队创建全局预提交挂钩
【发布时间】:2014-07-31 15:22:15
【问题描述】:

如何创建可供团队中每个人使用的全局预提交挂钩? 基本上,我希望任何时候有人克隆远程存储库,他应该默认获得这个全局预提交钩子。

我遇到了这个change default git hooksGit commit hooks - global settings 和这个https://coderwall.com/p/jp7d5q,它建议创建一个具有通用钩子的模板目录并将init.templatedir 设置为指向该目录。但是,这仅对在您自己的机器上为您自己设置默认挂钩有用。默认情况下,如何将 pre-commit 挂钩提供给整个团队?

【问题讨论】:

  • 完成这项工作的唯一方法是让人们的帐户已经设置好并使用此基础架构(没有什么可以阻止他们以后删除它)。

标签: git githooks


【解决方案1】:

pre-commit 挂钩如何默认对整个团队可用?

不能,正如我在“Difference between pre-push and pre-receive hook in git?”中解释的那样

从安全的角度来看,这真的有点吓人——当我运行某些 git 命令时,没有人应该有能力强迫我执行某些脚本

所以:

但无论如何,请记住 git commit --no-verify 无论如何都会绕过预提交挂钩。

这就是为什么服务器端挂钩更安全(如“Difference between pre-push and pre-receive hook in git?”中所述)并且会捕获所有推送到受祝福的仓库的错误提交。

这并不是说 pre-commit 钩子没有用:如果你能说服用户激活它,它将有助于更快地捕获错误,这是一件好事。
但它不能“自动”执行。

【讨论】:

  • 感谢您清除我的概念。我知道预接收挂钩对于我的用例来说是更好的选择。我对全局预提交挂钩很好奇,因为“它有助于更​​快地捕获错误,这是一件好事”。
【解决方案2】:

幸运的是,没有办法强制对 clone 的人进行钩子。

如果有,你可以写一个带有rm -rf /post-receive钩子,然后在pull时擦除人们的硬盘

您可以做的是设置一个命令来在本地自动安装存储库挂钩。有一些像husky 这样的软件包可以简化这个任务。基本上你可以在 repo 上配置它,然后要求人们在克隆 repo 后立即运行npm i,从现在开始,他们将使用你在 repo 上指定的钩子。

你应该只和你信任的人一起做,因为一旦你用npm i命令安装了钩子,你就会暴露在上面指定的攻击中

【讨论】:

    【解决方案3】:

    https://github.com/rycus86/githooks 是管理钩子的真正选择

    这是……

    1. 安全(它使用opt-in model,它将要求确认是否应该运行(或禁用)新的或更改的脚本)
    2. 可配置
    3. 为您处理很多细节
    4. 让您的挂钩井井有条。例如:
    /
    └── .githooks/
        └── commit-msg/
            ├── validate
            └── add-text
        └── pre-commit/
            ├── 01-validate
            ├── 02-lint
            ├── 03-test
            ├── docs.md
            └── .ignore
        └── post-checkout
        └── ...
        └── .ignore
        └── .shared
        └── .lfs-required
    ├── README.md
    ├── LICENSE
    └── ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多