Git 挂钩拼写检查器忽略缩进行

Git Hook Spellchecker Ignore Indented Lines

我正在编写一个 git 钩子来拼写检查我的提交消息。这是我目前所拥有的:

#!/bin/sh

ASPELL=$(which aspell)

WORDS=$($ASPELL list < "")

if [ -n "$WORDS" ]; then
    echo -e "Possible spelling errors found in commit message. Consider using git commit --amend to change the message.\n\tPossible mispelled words: " $WORDS
fi

我不确定如何告诉 aspell 我想忽略缩进的行(两个或更多空格)。这将避免有关文件名、注释等的恼人消息。

谢谢!

你有没有参加 EECS 398?

只是在不破坏荣誉密码的情况下给你提示。

将提交消息放入文本文件中。使用文本编辑器从文本文件中删除缩进的行。然后把文本文件通过aspell.

如果其他人遇到这个问题并且不在任何大学 class 原始发帖者所说的,这就是我解决问题的方法:

#!/bin/bash
ASPELL=$(which aspell)
if [ $? -ne 0 ]; then
    echo "Aspell not installed - unable to check spelling" >&2
    exit
else
    WORDS=$($ASPELL --mode=email --add-email-quote='#' list < "")
fi
if [ -n "$WORDS" ]; then
    printf "\e[1;33m  Possible spelling errors found in commit message.\n  Possible mispelled words: \n\e[0m\e[0;31m%s\n\e[0m\e[1;33m  Use git commit --amend to change the message.\e[0m\n\n" "$WORDS" >&2
fi

当我们实际调用 aspell 时,关键部分是 --mode=email --add-email-quote='#' 个参数。

--mode 设置 filter 模式,在我们的例子中,我们将其设置为 email 模式。描述为:

The email filter mode skips over quoted text. ... The option add|rem-email-quote controls the characters that are considered quote characters, the defaults are '>' and '|'.

因此,如果我们将“#”添加到 "quote" 个字符的列表中,aspell 将跳过它。我们当然使用 --add-email-quote 选项来做到这一点。

请注意,根据文档,我们还跳过了“>”和“|”。如果您不想 aspell 跳过这些,请使用 --rem-email-quote 选项。

有关详细信息,请参阅 aspell's man page here