2013-09-30 5 views
1

Я установка пользовательской GIT псевдоним, чтобы сделать симпатичную журнал G, как это в моем ~/.gitconfigSourced мерзавец псевдоним не удается

[alias] 
    l = "!source ~/.githelpers && git_pretty_log" 

Моего ~/.githelpers файл содержит следующее:

#!/bin/bash 

HASH="%C(yellow)%h%C(reset)" 
RELATIVE_TIME="%C(green)%ar%C(reset)" 
AUTHOR="%C(bold blue)%an%C(reset)" 
REFS="%C(red)%d%C(reset)" 
SUBJECT="%s" 

FORMAT="$HASH{$RELATIVE_TIME{$AUTHOR{$REFS $SUBJECT" 

function git_pretty_log() { 
    git log --graph --pretty="tformat:$FORMAT" $* | 
    column -t -s '{' | 
    less -FXRS 
} 

Но когда я git l в любом репо у меня есть я получаю:

$ git l 
source ~/.githelpers && git_pretty_log: 1: source ~/.githelpers && git_pretty_log: source: not found 
fatal: While expanding alias 'l': 'source ~/.githelpers && git_pretty_log': Aucun fichier ou dossier de ce type 

Любые идеи?

+0

Что «Aucun Fichier НУ досье де се типа» означает? – poke

+0

@poke: Нет файла или папки этого типа. – Ryan

+0

Работает ли он, если вы замените 'git_pretty_log' на' echo hello'? – Ryan

ответ

3

Ошибка, кажется, что source не является внешним двоичным кодом, а вместо этого встроен bash.

$ git config alias.foo '!source .gitfoo' 
$ git foo 
source .gitfoo: 1: source .gitfoo: source: not found 

Обертывание все это с bash -c решает эту проблему.

$ git config alias.foo '!'"bash -c 'source .gitfoo && gitfoobar'" 
$ echo 'function gitfoobar() { echo foo bar; }' >.gitfoo 
$ git foo 
foo bar 

В вашем случае:

git config --global alias.l '!'"bash -c 'source ~/.githelpers && git_pretty_log'" 
+0

(И что он цитируется, но да, это правильное решение ':)') – Ryan

+0

Отлично, спасибо! – manu

-1

Удалить кавычки; это должно быть просто:

[alias] 
    l = !source ~/.githelpers && git_pretty_log 

В противном случае, вы пытаетесь запустить одну длинную команду, которая не существует, так же, как сообщение об ошибке сказал.

+0

Я пробовал это перед публикацией. Это кажется необоснованным ... – manu

Смежные вопросы