有没有办法禁止特定的命令和选项组合?

有没有办法禁止特定的命令和选项组合?

假设我创建了一个新的存储库,并尝试提交。 Git 向我展示了

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

在没有阅读最后一行的情况下,我运行了 git (使用 )建议的两行--global并愉快地提交。

一周后,我为一个完全不相关的项目创建了一个新的存储库,我需要在不同的user.email.我什至不假思索地user.email尝试承诺,它会经历并推动到原点。

上述情况在我身上发生过两次,让我思考是否有办法禁止git config --global

例如,如果我运行

git config --global user.email "[email protected]"

我希望 bash 不要运行命令并向我显示警告,但是当我运行时

git config user.email "[email protected]"

我希望它能够通过。

是否可以?

答案1

最简单的是为这种情况创建一个函数(对于 Bash):

git() {
    for arg in "$@"; do
        if [[ $arg == --global ]]; then
            echo "Don't use '--global'!"
            return 1
        fi
    done 
    command git "$@"
}

请注意,这不会检查是否--global存在实际上git一个选项,而不是例如另一个选项的选项参数,如果从 shell 之外的其他地方运行,则至少没有关系。另外,如果你创建一个 git 别名来 include --global,它不会被这个捕获,等等。显然你也可以通过运行command gitor来规避保护/usr/bin/git,或者只是取消定义该函数。

相关内容