Установка 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.