Установка флагов git по умолчанию для команд
Я хочу знать, есть ли способ установить флаг по умолчанию для команды git. В частности, я хочу установить --abbrev-commit
флаг, чтобы при выполнении git log
Хочу выполнить git log --abbrev-commit
,
В отличие от вопроса " есть ли способ установить флаг по умолчанию для команды git?", Очевидно, нет флага конфигурации для добавления --abbrev-commit в журнал git. Более того, в руководстве git говорится, что я не могу создать псевдоним: "Чтобы избежать путаницы и проблем с использованием скриптов, псевдонимы, которые скрывают существующие команды git, игнорируются"
Мой третий вариант - изобрести новый псевдоним, такой как glog=log --abbrev-commit
в моем.gitconfig файле. Но я бы не стал изобретать свой собственный DSL с новыми командами.
Есть ли другой способ добиться этого, чтобы abbrev-commit
флаг установлен по умолчанию??
8 ответов
Начиная с git версии 1.7.6, в git config появилась опция log.abbrevCommit, для которой можно установить значение true. Таким образом, ответом является обновление по крайней мере до 1.7.6 (текущий на момент написания статьи 1.7.11.4) и использование:
git config --global log.abbrevCommit true
Вы можете использовать пользовательский формат, чтобы иметь git log
мим --abbrev-commit
по умолчанию:
git config format.pretty "format:%h %s"
В git нет универсального механизма установки аргументов по умолчанию для команд.
Вы можете использовать псевдонимы git для определения новой команды с необходимыми аргументами:
git config alias.lg "log --oneline"
Тогда вы можете запустить git lg
,
Некоторые команды также имеют параметры конфигурации для изменения их поведения.
Мне нравится git log --oneline
формат. Чтобы получить его по умолчанию, используйте
git config --global format.pretty oneline
Фото: https://willi.am/blog/2015/02/19/customize-your-git-log-format/
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" "$@"
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" "$@"
else
"$(which git)" "$@"
fi
}
Вы можете переопределить git log
поставив скрипт с именем git-log
где-то в вашем пути
#!/bin/sh
git log --abbrev-commit "$@"
У меня похожая проблема (многие опции по умолчанию для команд Git тупые). Вот мой подход. Создайте скрипт под названием "grit" (или любой другой) на вашем пути следующим образом:
#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
git
elif [ $cmd = "log" ]; then
git log --abbrev-commit $@
elif [ $cmd = "branch" ]; then
git branch -v $@
elif [ $cmd = "remote" ]; then
git remote -v $@
else
git $cmd $@
fi
Очень просто читать и поддерживать, если вам нужно поделиться этим с экспертами Bash.
Каждая используемая нами утилита (svn, maven, git, ...) всегда инкапсулируется в.bat (в Windows или.sh в Unix), чтобы предложить нашим разработчикам один каталог для добавления к их пути.
Если git инкапсулирован в скрипт-обертку, тогда... все возможно.
Но это остается решением, связанным с настройками пользователя, а не с самим Git или с git-репо.
Сочетание идей Стива Беннета и PotatoFarmer выше, но полностью динамическое, не требующее обновлений скрипта, а также позволяющее использовать флаги для каждого проекта, используя функцию git «псевдоним» и наше собственное соглашение: все, что имеет префикс «my-», получает нашу обработку, в противном случае это просто прошел. У меня есть это как "~/bin/my_git" и я использую псевдоним в .bashrc , чтобы использовать его вместо git (alias git="$HOME/bin/my_git"
):
#!/bin/bash
set -euo pipefail
cmd=${1:-}
shift 1
if [ "$cmd" = "" ]; then
git
# Ask git itself if we have a "my-<cmd>" version to prefer
elif git config --list | egrep -q "^alias\.my-$cmd="; then
git my-$cmd $@
else
git $cmd $@
fi
И, конечно же, сопоставление записей по желанию в~/.gitconfig
и/или вашего проекта.git/config
файл:
[alias]
my-merge = merge --no-commit
my-log = log --name-status