Псевдоним мерзавца с позиционными параметрами

В основном я пытаюсь исказить:

git files 9fa3

... выполнить команду:

git diff --name-status 9fa3^ 9fa3

но мерзавец, кажется, не передает позиционные параметры команде псевдонима. Я попробовал:

[alias]
    files = "!git diff --name-status $1^ $1"
    files = "!git diff --name-status {1}^ {1}"

... и немногие другие, но они не работали.

Вырожденный случай был бы:

$ git echo_reverse_these_params a b c d e
e d c b a

... как я могу сделать эту работу?

243
задан user400575 23 June 2014 в 13:07
поделиться

2 ответа

Самый очевидный способ - использовать функцию оболочки:

[alias]
    files = "!f() { git diff --name-status \"$1^\" \"$1\"; }; f"

Псевдоним без ! рассматривается как команда Git; например, commit-all = commit -a.

С ! , он запускается как собственная команда в оболочке, позволяя вам использовать более сильную магию, например, такую.

UPD
Поскольку команды выполняются в корне репозитория, вы можете использовать переменную ${GIT_PREFIX}, когда ссылаетесь на имена файлов в командах

349
ответ дан 23 November 2019 в 03:10
поделиться

Вы также можете обратиться к sh напрямую (вместо создания функции):

[alias]
        files = !sh -c 'git diff --name-status $1^ $1' -

(Обратите внимание на тире в конце строки - оно вам понадобится.)

90
ответ дан 23 November 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: