Установка git флаги по умолчанию для команд

Я хочу знать, есть ли способ установить флаг по умолчанию для команды git. В частности, я хочу установить флаг --abbrev-commit, чтобы при выполнении git log я хотел выполнить git log --abbrev-commit.

В отличие от вопроса есть ли какой-либо способ установить флаг по умолчанию для команды git?, по-видимому, не существует флаг конфигурации для добавления - -abbrev-commit для журнала git. Кроме того, в руководстве git указано, что я не могу создать псевдоним: "Чтобы избежать путаницы и проблем с использованием script, псевдонимы, которые скрывают существующие git команды игнорируются"

Моим третьим вариантом является создание нового псевдонима типа glog=log --abbrev-commit в моем файле .gitconfig. Но я бы предпочел не придумывать свои собственные DSL с новыми командами.

Есть ли другой способ добиться этого, чтобы флаг abbrev-commit был установлен по умолчанию?

Ответ 1

Так как git версия 1.7.6, git config получил параметр log.abbrevCommit, который может быть установлен в true. Таким образом, ответ будет обновлен, по крайней мере, до 1.7.6 (текущий на момент написания - 1.7.11.4) и используйте:

git config --global log.abbrevCommit true

Ответ 2

Вы можете использовать пользовательский формат для git log mimic --abbrev-commit по умолчанию:

git config format.pretty "format:%h %s"

Ответ 3

В git нет универсального механизма для установки аргументов по умолчанию для команд.

Вы можете использовать git aliases для определения новой команды с необходимыми аргументами:

git config alias.lg "log --oneline"

Затем вы можете запустить git lg.

Некоторые команды также имеют настройки конфигурации, чтобы изменить их поведение.

Ответ 4

VonC уже намекнул на оболочку оболочки в своем ответе; вот моя реализация Bash такой оболочки. Если вы положите это, например, в ваш .bashrc, ваша интерактивная оболочка будет поддерживать переопределение встроенных команд Git, а также псевдонимов верхнего регистра.

# Git supports aliases defined in .gitconfig, but you cannot override Git
# builtins (e.g. "git log") by putting an executable "git-log" somewhere in the
# PATH. Also, git aliases are case-insensitive, but case can be useful to create
# a negated command (gf = grep --files-with-matches; gF = grep
# --files-without-match). As a workaround, translate "X" to "-x". 
git()
{
    typeset -r gitAlias="git-$1"
    if 'which' "$gitAlias" >/dev/null 2>&1; then
        shift
        "$gitAlias" "[email protected]"
    elif [[ "$1" =~ [A-Z] ]]; then
        # Translate "X" to "-x" to enable aliases with uppercase letters. 
        translatedAlias=$(echo "$1" | sed -e 's/[A-Z]/-\l\0/g')
        shift
        "$(which git)" "$translatedAlias" "[email protected]"
    else
        "$(which git)" "[email protected]"
    fi
} 

Затем вы можете переопределить git log, помещая script с именем git-log где-то в ваш PATH:

#!/bin/sh
git log --abbrev-commit "[email protected]"

Ответ 5

У меня подобная проблема (многие из опций по умолчанию для команд Git тупые). Вот мой подход. Создайте script, называемый "grit" (или любой другой) на вашем пути, следующим образом:

#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
  git
elif [ $cmd = "log" ]; then
  git log --abbrev-commit [email protected]
elif [ $cmd = "branch" ]; then
  git branch -v [email protected]
elif [ $cmd = "remote" ]; then
  git remote -v [email protected]
else
  git $cmd [email protected]
fi

Очень просто читать и поддерживать, если вам нужно поделиться им с Bash неспециалистами.

Ответ 6

Каждая используемая нами утилита (svn, maven, git,...) всегда инкапсулируется в .bat(в Windows или .sh в Unix), чтобы предложить нашим разработчикам один каталог для добавления в свои путь.

Если git инкапсулируется в обертку script, тогда... все возможно.

Но это остается решением, связанным с пользовательской настройкой, не связанным с самим git или репо git.