特定のコマンドとオプションの組み合わせを無効にする方法はありますか?

特定のコマンドとオプションの組み合わせを無効にする方法はありますか?

新しいリポジトリを作成してコミットしようとしているとします。 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(using)が提案した2行を実行して--global楽しくコミットしました。

1週間後、私は他のプロジェクトに必要な完全に関連していないプロジェクトのための新しいリポジトリを作成しましたuser.email。コミットを試みることについて二度考えることはせず、user.emailそれが進み、オリジンにプッシュされました。

上記のような状況が2回も発生しましたが、これを禁止する方法がないか悩んでいます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たとえば、他のオプションのオプション引数以外のオプションは、少なくともシェル以外の場所で実行される場合は重要ではありません。また、 を含めるために git エイリアスを生成すると、--globalこれなどによって捕捉されません。明らかに、またはを実行するか、関数定義を取り消すことによってcommand git保護をバイパスすることができます。/usr/bin/git

関連情報