Встановлення прапорців git за замовчуванням для команд


89

Я хочу знати, чи є спосіб встановити прапорець за замовчуванням для команди git. Зокрема, я хочу встановити --abbrev-commitпрапор так, щоб під час виконання git logя хотів виконати git log --abbrev-commit.

На відміну від питання " чи є спосіб встановити прапорець за замовчуванням для команди git? ", Очевидно, що немає прапора конфігурації для додавання --abbrev-commit до журналу git. Крім того, у посібнику git зазначено, що я не можу створити псевдонім: "Щоб уникнути плутанини та проблем із використанням сценарію, псевдоніми, які приховують існуючі команди git, ігноруються"

Мій третій варіант - винайти новий псевдонім, як glog=log --abbrev-commitу моєму файлі .gitconfig. Але я волів би не вигадувати власний DSL за допомогою нових команд.

Чи є інший спосіб досягти цього, щоб abbrev-commitпрапор був встановлений за замовчуванням ??


1
Станом на git 1.7.6 існує прапор, який контролює цю поведінку. Дивіться відповідь @underrun нижче.
slacy

Відповіді:


59

Починаючи з версії git 1.7.6, конфігурація git отримала опцію log.abbrevCommit, яку можна встановити як true. Таким чином, відповідь полягає в модернізації щонайменше до 1.7.6 (на момент написання цієї статті 1.7.11.4) і використання:

git config --global log.abbrevCommit true

2
Не думайте, що є варіант для одного рядка?
Zaz,

1
Я приймаю цю відповідь. Приємно бачити, як Git додав цю конфігурацію, оскільки я написав запитання майже чотири роки тому.
Jesper Rønn-Jensen

Де джерело всіх цих містичних варіантів?
xaxxon

Хтось знає прапор за замовчуванням для графіка? Я не можу знайти його на сторінці @xaxxon linked ..
myol

@myol, вам слід скористатися git config --helpабо, git help configщоб отримати документацію, що відповідає вашій установці .
доак

46

Ви можете використовувати власний формат для git logімітації --abbrev-commitза замовчуванням:

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

Чудово, це легко найкраща відповідь.
duane

Ви також можете використовувати кольори під час форматування: "% C (жовтий)% h% Creset% s" відображатиметься як git log --oneline з кольорами.
Авнер

1
Тепер коротке запитання: якщо ви вважаєте це корисним і це відповідає саме на проблему, чому б вам не позначити це як правильне?
igorsantos07

1
Це краще, якщо ви не хочете запам'ятовувати неясні або важко запам'ятовуються псевдоніми і вважаєте за краще просто використовувати "git log" весь час.
Shyam Habarakada

1
Це була найкраща відповідь для мене. log.abbrevCommitПараметр впливає інше Детальніше форматів, які я не робив подібного. Також використовуйте, %C(auto)%h %sщоб отримати звичайний однорядковий формат з автоматичним забарвленням. Я використовував, git config --global format.pretty "%C(auto)%h %d %s"тому що хотів оформити одну лінію як свою "за замовчуванням"
davenpcj

34

У git не існує загального механізму для встановлення аргументів за замовчуванням для команд.

Ви можете використовувати псевдоніми git для визначення нової команди з необхідними аргументами:

git config alias.lg "log --oneline"

Тоді можна бігати git lg.

Деякі команди також мають налаштування конфігурації, щоб змінити їх поведінку.


12
Я хочу уникати створення власного синтаксису, тому я б віддав перевагу рішенню, де не використовую, git lgалеgit log
Jesper Rønn-Jensen 24.03.10

чому? яка різниця?
hasen

46
Дуже важлива відмінність полягає в тому, що я не хочу вводити "синтаксис git Jespers" у свою систему. Я хочу, щоб я (та інші, хто використовує мою машину) використовував загальні команди. Крім того, це пришвидшить мою роботу на інших машинах: я не переживаю, що випадково наберу "git lg" і
отримаю

19
Якщо хтось інший використовував вашу машину та набирав git log, ваше передбачуване рішення означало б, що вони отримали б результати, яких вони не очікували.
Abizern

1
Перевизначення стандартних псевдонімів може порушити сценарії.
justintime

10

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у ваш PATH:

#!/bin/sh
git log --abbrev-commit "$@"

7

У мене схожа проблема (багато опцій за замовчуванням для команд 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.


Ви дійсно хочете, щоб "git remote blah" називав "git branch blah"? Я використовую варіант цього, коли я розміщу git раніше у шляху, а потім явно викликаю / usr / bin / git у своєму сценарії. Так, це, мабуть, щось ламає.
LovesTha

1
Мені це сподобалось і я зробив два додаткові доробки. Я зробив це функцією Баша , і нехай він буде називатися git, додавши перший рядок , щоб отримати реальний шлях команди: thegit=`/usr/bin/which git`. І я додав можливість скасувати перевизначення з ї перед командою , як git x log ...: if [ "$cmd" = "x" ]; then; $thegit $@.
Джошуа Голдберг


0

Кожна утиліта, якою ми користуємося (svn, maven, git, ...), завжди інкапсульована в .bat (у Windows або .sh в Unix), щоб запропонувати нашим розробникам один каталог, який можна додати до їх шляху.

Якщо git інкапсульовано у сценарій обгортки, тоді ... все можливо.

Але це залишається рішенням, пов’язаним із налаштуваннями користувача, не пов’язаним із самим Git чи репозиторієм git.


Отже, ви маєте на увазі, що я мав би змогу цього досягти, додавши псевдонім до мого .bash_profile?
Jesper Rønn-Jensen

@Jesper: це ідея, оскільки ваша обгортка git.bat зможе визначити, яку команду Git ви хочете виконати, і може додати будь-яку потрібну опцію.
VonC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.