繁体   English   中英

是否可以提交预提交挂钩?

[英]Is it possible to commit the pre-commit hooks?

我们为我们的 Python 项目设置了预提交挂钩。 pre-commit位于未跟踪的.git文件夹中(有充分的理由)。

但是对于一个新人来说,克隆一个 repo 并忘记启动提交钩子是很常见的。 有可能自动化吗? 例如,通过 git 跟踪提交挂钩? 或者通过其他一些机制,例如当git clone时,钩子会自动设置。

例如,将..git/hooks/pre-commmit.gitignore并不能解决问题。

不,这是不可能的。

(有趣的是,这回答了你的问题,我建议将其重命名为“如何提交预提交挂钩”)

我不确定如何在没有构建系统的 python 项目中执行此操作。 您可以在自述文件中添加一些行。

我们在 dotnet 和 android 项目中所做的事情:我们在我们的项目中添加了一个可以设置挂钩的阶段。 开发人员很有可能在提交之前至少构建一次项目。

我们有目录/git_hooks和从中复制文件的脚本:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Message Text="Install Git Hooks" Importance="high" />
    <Copy SourceFiles="$(SolutionDir)/git_hooks/pre-commit" 
          DestinationFolder="$(SolutionDir)/.git/hooks" 
          ContinueOnError="true" 
          SkipUnchangedFiles="true" />
</Target>

或者

buildscript {
   //.....
    copy {
        from "./git_hooks"
        into "./.git/hooks"
        fileMode 0777
    }
}

在 Android 上。

您不能自动执行此操作,因为挂钩可以运行任意代码,并且任何自动设置挂钩的机制都将是一个安全漏洞,因为它会让存储库的所有者在开发人员机器上执行任意代码。

但是,您可能希望将它们签入存储库中的某个位置,然后设置一个标准脚本(例如GitHub 使用的那种),它安装挂钩并准备存储库以供使用。

但是,我鼓励您阅读Git 常见问题解答条目关于pre-commit挂钩 它指出它们是用来帮助开发人员的,而不是作为一种有效的控制,因为它们很容易被绕过而无需通知。 此外,许多使用频繁压缩和变基的工作流的开发人员(我就是其中之一)发现pre-commit钩子是他们标准工作流的一个令人讨厌的障碍,因为许多临时提交被创建和销毁。 因此,您最好使用 CI 系统来验证测试和代码样式等内容,并让开发人员可以选择使用钩子(如果他们想使用它们)。

这是可能的,但不推荐。

初始化存储库时,它会从git 模板复制挂钩。 我们可以在模板中创建一个post-checkout 这是一个示例:

#!/bin/bash

gitworktree=$(git rev-parse --show-toplevel)
if [[ -f ${gitworktree}/pre-commit ]];then
    echo deploy pre-commit
    cp -v ${gitworktree}/pre-commit ${gitworktree}/.git/hooks/pre-commit
    chmod a+x ${gitworktree}/.git/hooks/pre-commit
fi

在没有-ngit clone之后, post-checkout会自动复制到新存储库的.git/hooks中。 然后签出代码并调用post-checkout 如果新存储库中存在pre-commit ,则将其复制到.git/hooks 这只是一个草案计划。 在实际案例中可能存在一些问题。 例如,我们如何处理模板中已经存在的pre-commit 是否有必要检查pre-commit是否是已提交的? 如果pre-commit中有恶意代码怎么办?

正如其他答案所说,这不是一个好主意。 不要在生产环境中这样做。

看看https://pre-commit.com/

您可以使用您的钩子创建一个单独的存储库并在您的项目中使用它。 使用是通过 YAML 文件配置的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM