在 Git 中运行预提交挂钩。有没有办法验证脚本是否正在运行?

2024-03-04

我想运行 Git,按照博客的建议,我使用了$git init初始化存储库,然后.git在 hooks 目录中存在钩子的位置创建文件夹。然后按照我重命名的脚本的建议pre-commit.sample as pre-commit它不起作用,所以我将其重命名为pre-commit.sh它似乎仍然没有在后台运行,或者我至少不知道它在后台运行。

因此,为了了解它是否在后台运行,我使用了 echo 语句,但我从未出现。感觉迷失了,我接下来尝试手动运行脚本.\pre-commit.sh在 powershell 中,echo 语句未打印在控制台上。其一,我不知道即使 echo 语句通过使用用户的输入源停止脚本的进度而成功,控制台是否也会显示。

所以请告诉我——如何设置预提交挂钩?我是不是看错程序了?我在这里错过了什么吗?请告诉我。

我使用的钩子是默认的预提交钩子实现,只是为了方便起见,我将它放在这里 - 希望它

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

if git rev-parse --verify HEAD >/dev/null 2>&1
then
    against=HEAD
else
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --bool hooks.allownonascii)

# Redirect output to stderr.
exec 1>&2

# Cross platform projects tend to avoid non-ASCII filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
    # Note that the use of brackets around a tr range is ok here, (it's
    # even required, for portability to Solaris 10's /usr/bin/tr), since
    # the square bracket bytes happen to fall in the designated range.
    test $(git diff --cached --name-only --diff-filter=A -z $against |
      LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
    cat <<\EOF
Error: Attempt to add a non-ASCII file name.

This can cause problems if you want to work with people on other platforms.

To be portable it is advisable to rename the file.

If you know what you are doing you can disable this check using:

  git config hooks.allownonascii true
EOF
    exit 1
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

首先,您可以添加一个简单的回声。

其次,该脚本将由msys 类似 bash 的 shell https://stackoverflow.com/a/17810334/6309,因此您无法直接从 PowerShell Windows 会话运行它。

第三,确保您确实向索引添加了一些元素,以便 git 提交有要提交的内容(并且预提交挂钩有一个被触发的理由)。


dennis https://stackoverflow.com/users/1992360/dennis adds 在评论中 https://stackoverflow.com/questions/25188028/run-a-precommit-hook-in-git-is-there-a-way-to-verify-that-the-script-is-running/25225689?noredirect=1#comment39559377_25225689:

  • 它应该重命名为“pre-commit“ 并不是 ”pre-commit.sh" and
  • 该脚本确实运行并在命令提示符/powershell 上显示回显语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Git 中运行预提交挂钩。有没有办法验证脚本是否正在运行? 的相关文章

随机推荐

  • 转换为 Vector' aria-label='无法将类型 转换为 Vector'> 无法将类型 转换为 Vector

    给定我的 pyspark Row 对象 gt gt gt row Row clicked 0 features SparseVector 7 0 1 0 3 1 0 6 0 752 gt gt gt row clicked 0 gt gt
  • 无法在l5-swagger中生成API文档

    我开始学习招摇了 我正在尝试做书上所做的同样的事情 使用 Angular 6 和 Laravel 5 进行全栈 Web 开发实践 输入命令后使用 php fpm bash php artisan l5 swagger generate 我在
  • jQuery .when().done() 不工作

    首先我想说我是 jQuery 的新手 我怀疑我只是做了一些愚蠢的事情 所以希望这对某人来说会很简单 我正在尝试向我的网站添加滑动移动子菜单 我想要一种手风琴效果 如果我单击一个父链接 它的子子菜单将打开 所有其他子菜单将关闭 问题在于时间
  • Console.ReadLine() 在 VS Code 中不起作用,用 C# 编写代码

    我正在学习 C 并且正在使用 VS Code 当我尝试使用 Console ReadLine 从用户那里获取输入时 它不起作用 我从一个视频中提到了它 它做了完全相同的事情 但经过几次谷歌搜索后 我仍然不知道我哪里出了问题 Console
  • 将 ROW_NUMBER 列添加到流数据帧

    我对 Spark 和 SQL 还很陌生 我正在尝试向我的 df 添加一列 然后将其保存到 Delta 表 该列为每个记录 行提供唯一的 id 并在每次更新特定记录时递增它 我试图执行以下操作 SELECT etc CONCAT somero
  • 类型错误:列表索引必须是整数或切片,而不是列表

    数组 某种具有 3 列和无限数量的行且其中包含数据的列表 Volume array 0 2 counter 0 for i in array if Volume array i 2 lt why is this line a problem
  • 哪些 GOF 设计模式具有完全不同的实现(java 与 Scala)

    最近我读到以下问题 在 Scala 中是否有使用访问者模式的用例 我是否应该在每次使用 Scala 时都使用模式匹配 Java 中的访问者模式 标题问题的链接 Scala 中的访问者模式 https stackoverflow com qu
  • 文本编辑器的数据结构

    这是一道面试题 您将使用什么数据结构来存储文本编辑器中的文本 在老式的 ZX Spectrum 上 一个 或多个 我不知道 文本编辑器使用了非常简单的结构 有一个很大的缓冲区 占用了所有空闲 RAM 文本在光标处分成两部分 光标之前的部分放
  • Gradle:如何通过运行 Gradle 4.1 任务通过 eclipse ECJ(JDT 核心)编译 Java

    我有一个可以很好构建的项目日食 欧洲法院 But 甲骨文javac无法构建它 一些原因如链接中所示 ecj和javac的区别 https stackoverflow com questions 3061654 what is the dif
  • C语言中的二维数组如何变成一维数组?

    如果有人可以向我解释以下行为 我将不胜感激 假设我声明一个静态二维数组 float buffer NX NY 现在 如果我想填充这个数组 我注意到可以这样做 initarray buffer NX NY define INITDATAVAL
  • 没有 Redux 的情况下组合Reducer

    我有一个没有 redux 的应用程序 我使用钩子和钩子 useReducer context 处理全局状态 我有 1 个 useReducer 它就像一个 Redux 商店 但要做到这一点我只能发送 1 个减速器 在该减速器中 我拥有所有状
  • 根据数组中的另一个 id 仅对多数组中的第一项进行排序 (PHP)

    我不知道该怎么做 请参阅下面我的数组 我在 while 循环中运行这个数组 需要先找到 attach id 对于每个 topic id 并可以使用 topic id在循环中设置的 正确的输出将是 第一个循环 attach id gt 179
  • 神经网络在一个纪元后趋于平坦

    我正在使用 keras 创建一个卷积神经网络 尝试将图像分类为两个不同的类 并且出于某种原因 在第一个纪元之后 准确性永远不会改变 使用 Keras 后to categorical 我的标签看起来像 0 1 1 0 1 0 0 1 我的模型
  • Amazon SES SMTP Python 用法

    我试图诊断为什么通过 Amazon SES 发送电子邮件无法通过 python 工作 以下示例演示了该问题 其中user and pass设置为适当的凭据 gt gt gt import smtplib gt gt gt s smtplib
  • System.Timers.Timer 与 System.Threading.Timer

    我最近一直在检查一些可能的计时器 并且System Threading Timer https learn microsoft com en us dotnet api system threading timer and System T
  • 即使有标记,pytest-django 也不允许数据库访问

    我很难找出我的设置出了什么问题 我正在尝试测试登录视图 无论我尝试什么 我都会得到 Database access not allowed use the django db mark or the db or transactional
  • 统一处理非托管 API 中的错误代码

    我正在围绕一个相当大的非托管 API 编写一个包装器 几乎每个导入的方法在失败时都会返回一个常见的错误代码 现在 我正在这样做 ErrorCode result Api Method if result ErrorCode SUCCESS
  • Playframework 与 CSRF:“会话中未找到 CSRF 令牌”?

    我正在使用 Playframework 及其内置 CSRF 过滤器和 Security Authenticator 系统制作一个简单的身份验证系统 但我遇到了一个问题 当用户填写登录名 密码并提交输入时 出现以下错误 在会话中找不到 CSR
  • 如何更新 SQL 中游标获取的列

    在进一步讨论之前 是的 我知道与基于集合的操作相比 游标的性能很差 在这种特殊情况下 我在包含 100 条左右记录的临时表上运行游标 并且该临时表始终相当小 因此性能不如灵活性那么重要 我的困难是我无法找到如何更新游标获取的列的示例 以前
  • 在 Git 中运行预提交挂钩。有没有办法验证脚本是否正在运行?

    我想运行 Git 按照博客的建议 我使用了 git init初始化存储库 然后 git在 hooks 目录中存在钩子的位置创建文件夹 然后按照我重命名的脚本的建议pre commit sample as pre commit它不起作用 所以