Установка флагов 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
Другие вопросы по тегам