Создание псевдонима «git log» с форматированием

У меня есть куча псевдонимов git, уже настроенных в моем .bash_profile, которые работают правильно:

alias gst="git status"
alias gl="git pull"
alias gp="git push"
alias gd="git diff | mate"
alias gc="git commit -v"
alias gca="git commit -v -a"
alias gb="git branch"
alias gba="git branch -a"

Я пытаюсь добавить псевдоним для следующей команды, но продолжаю сталкиваться с ошибкой:

git log --all --pretty=format:'%h %cd %s (%an)' --since='7 days ago'

То, что я хотел бы сделать, это иметь возможность печатать:

glog 'some amount of time'

Итак, будучи новичком в псевдонимах и git, я решил, что это сработает:

alias glog="git log --all --pretty=format:'%h %cd %s (%an)' --since="

Выдает следующую ошибку:

fatal: ambiguous argument '7 days ago': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Как я могу исправить свой псевдоним, чтобы это сработало?

Спасибо!

[ИЗМЕНИТЬ]

Я могу заставить его работать, если я изменю псевдоним на:

alias glog="git log --all --pretty=format:'%h %cd %s (%an)'"

а затем просто введите:

glog --since='some amount of time'

но я действительно хотел бы просто ввести количество времени, если это возможно.


person loganhasson    schedule 18.09.2013    source источник


Ответы (1)


Вместо этого вы можете создать функцию в .bash_profile. Это позволит вам использовать переменные:

glog ()
{
        git log --all --pretty=format:'%h %cd %s (%an)' --since="$1"
}

И назовите его, как обычно:

glog "7 days ago"

быстрое продолжение: как бы я изменил функцию, чтобы разрешить возможность добавления флага --author="so-and-so"? например, я мог бы ввести glog "7 дней назад" или blog "7 дней назад" --author="bob"

Я бы поступил следующим образом:

glog ()
{
    if [ -z "$2" ]; then
       git log --all --pretty=format:'%h %cd %s (%an)' --since="$1"
    else
       git log --all --pretty=format:'%h %cd %s (%an)' --since="$1" --author="$2"
    fi
}

Таким образом, вы можете назвать это с помощью

glog "7 days ago"
glog "7 days ago" "bob"

Обратите внимание, что условие if [ -z "$2" ]; then проверяет, является ли второй параметр пустым. Если это так, просто выполняет код без author. В противном случае он использует его.

person fedorqui 'SO stop harming'    schedule 18.09.2013
comment
Это потрясающе... Мне нравится бонус, что мне не нужно вводить '' после команды. Спасибо! @konsolebox - кажется, у меня работает с '' вместо . Есть ли какие-то закулисные вещи, о которых я должен знать, что делает их чокнутыми? Спасибо! - person loganhasson; 18.09.2013
comment
Спасибо, @konsolebox. Странно, но у меня сработало и с "$1", и с '$1'. - person fedorqui 'SO stop harming'; 18.09.2013
comment
@LoganHasson приятно это читать! Поскольку вы здесь впервые, помните, что вы можете пометить ответ как принятый, если ваша проблема уже решена. Вы можете сделать это, нажав на галочку рядом с ответом, чтобы переключить его с пустого на зеленый. См. Справочный центр › Вопросы, если у вас есть какие-либо сомнения! - person fedorqui 'SO stop harming'; 18.09.2013
comment
@fedorqui - буду, и еще раз спасибо! Это заставляет меня ждать еще минуту, прежде чем принять. - person loganhasson; 18.09.2013
comment
@fedorqui - быстрое продолжение: как мне изменить функцию, чтобы разрешить также добавление флага --author = такой-то и такой-то? например, я мог ввести glog 7 дней назад или блог 7 дней назад --author=bob? - person loganhasson; 18.09.2013
comment
@fedorqui отлично, большое спасибо! (Раскапывая трюк [if -z $2].) - person loganhasson; 18.09.2013