4

Трижды за последнее время я делал действительно глупые вещи, используя git . Дважды я запускал git reset --hard в своем репозитории домашнего каталога. В первый раз, когда я перебрал поиск в обратном журнале в своей оболочке (совсем не хотел его запускать), а во второй раз я оказался в неправильном окне терминала (предназначенном для сброса другого репо). Другой ошибкой было выполнение git push --mirror ssh://remote-machine/ из неправильного репозитория.

git help config сообщает мне, что «чтобы избежать путаницы и проблем с использованием скриптов, псевдонимы, скрывающие существующие команды git, игнорируются», поэтому мои псевдонимы .git/config

[alias]
reset = "!echo no"
push = "!echo wrong repo"

игнорируются Есть ли способ сделать это просто? Скорее всего, я напишу какой-нибудь скрипт-обертку с alias git=wrapped-git в моей оболочке, но я надеялся, что будет более простой способ сделать это.

Обновление: с использованием следующего, основанного на ответе grawity, но с использованием встроенной системы конфигурации git. Это позволяет избежать grep'овского файла ad-hoc и позволяет "каскадировать" (~/.gitconfig отключает "сброс" глобально, но для каждого репозитория .git/config это позволяет). По моему .zshrc:

git () {
    local disabled=$(command git config --bool disabled.$1 2>/dev/null)
    if ${disabled:-false} ; then
        echo "The $1 command is intentionally disabled" >&2
        return 1
    fi
    command git "$@"
}

1 ответ1

4

Не совсем скрипт-обертка - вы можете создать функцию оболочки:

git() {
    local gitdir=$(git rev-parse --git-dir 2>/dev/null)
    if [[ $gitdir && -f $gitdir/disabled-commands ]]; then
        # "disabled-commands" should contain "push", "reset", etc
        if grep -Fwqse "$1" "$gitdir/disabled-commands"; then
            echo "You have disabled this command." >&2
            return 1
        else
            command git "$@"
        fi
    else
        command git "$@"
    fi
}

Нет более простого способа, чем это.

Редактировать: добавлен -e в grep: без него grep вмешивался в вызовы, такие как git --version , которые стали grep -Fwqs --version , а также в функции завершения табуляции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .