Синтаксис для псевдонимов Git с несколькими командами

Я хочу создать псевдоним Git для выполнения нескольких команд, но я не могу найти документацию о том, как это делается.

  • Каков синтаксис псевдонимов Git с несколькими командами?
  • Где это документировано?

От 'man git -config'

   alias.*

Командные псевдонимы для командной оболочки git (1) - например. после определения "alias.last = cat-file commit HEAD", вызов "gitlast" эквивалентно "git cat-file commit HEAD". Во избежание путаницы а также            проблемы с использованием script, псевдонимы, которые скрывают существующие команды Git, игнорируются. Аргументы разделяются пробелами, обычная оболочка цитирование и экранирование. пара цитат и обратная косая черта могут быть используемый            чтобы процитировать их.

Если расширение псевдонима имеет префикс с восклицательным знаком, оно будет рассматриваться как команда оболочки. Например, определение "alias.new =! gitk --all --not ORIG_HEAD", вызов "git new"            эквивалентно запуску команды оболочки "gitk -all -not ORIG_HEAD". Обратите внимание, что команды оболочки будут выполняться из каталог верхнего уровня репозитория, который может не обязательно быть текущий            каталог. GIT_PREFIX устанавливается как возвращаемый при запуске Git rev-parse --show-prefix из исходного текущего каталога. Видеть git -rev-синтаксический анализ (1).

Ответ 1

$ git config alias.q '!echo a; echo b'

$ git q

Вывод:

a
b

Я думаю, что это (рудиментарно) задокументировано в man git-config под alias.*

Обратите внимание, что команды git должны включать git, в отличие от обычных псевдонимов. Это вызвано тем фактом, что оно рассматривается как команда оболочки, а не как команда git (см. Man-страницу, указанную в вопросе). Например, чтобы цепочка

git init

и

git commit --allow-empty -m "empty initial commit"

необходимо создать

"!git init; git commit --allow-empty -m \"empty initial commit\""

псевдоним.

Ответ 2

Произнесите команды echo a и echo b (не a и b), чтобы добавить несколько команд для псевдонима q:

Из командной строки:
git config alias.q '!echo a; echo b'

Непосредственно в файле конфигурации:

[alias]
    q = "!echo a; echo b"

Для более сложных вещей определите функцию оболочки и назовите ее:
'!f() { echo a ; echo b ; }; f'

Для передачи параметров командам см.:
Git псевдоним с позиционными параметрами
Git Псевдоним - несколько команд и параметров

На основе Джонатана Вакели комментарий

Ответ 3

Дополнение Ответ: Часто мне нужны более сложные команды, которые решают, что делать через позиционные параметры, и переходят по параметрам или перебирают параметры или входные файлы.

Такие команды слишком сложны для однострочников и их трудно читать и редактировать в одной строке. Но я нашел очень простой способ делать очень сложные команды из файлов:

Предположим, у вас есть файл с именем alias/cmd в вашем хранилище:

!function f {
    if [ -z "$1" ]
    then echo "Please give me some argument!" 1>&2
        exit -1
    fi
    echo "Hello $1"
}; f

тогда вы можете просто сказать

git config alias.cmd "'cat alias/cmd'"

чтобы определить псевдоним cmd из файла и

git config --get alias.cmd > alias/cmd

записать определенный псевдоним в файл.

Ответ 4

Я изо всех сил пытался найти хороший пример для себя тоже. После некоторого исследования, вот что я придумал:

git config --global alias.purge '!f() { if [ $(git ls-remote --heads origin $1 | wc -l) -eq 1 ]; then git branch -d $1 && git push origin --delete $1; else echo "remote branch not found"; fi } ; f'

Давай разберем это слева направо?

git config --global псевдоним. мы уже знаем Это код, который нам нужен для создания псевдонима. На этом сайте часто упоминается как [псевдоним]

продувка это сокращенное имя, которое я решил дать своему псевдониму

'f() { мы начинаем писать нашу функцию

если [ начало нашего оператора if, закрывая его позже с помощью ]

git ls-remote --heads origin $ 1 проверяет, существует ли удаленная ветка с указанным нами именем. Возвращаемое значение было бы ничем, если бы не было ответвления, в противном случае он возвратит тег ссылки. Заключив его в $(), мы убедимся, что он известен Bash как команда

| туалет -1 добавляется в качестве суффикса, преобразует возвращаемое значение в 0, если нет удаленной ветки, в 1, если есть

-eq 1 превращает всю вложенную команду в логическое значение, читаемое как (returnValue == 1)

ПРИМЕЧАНИЕ: поскольку команды пишутся в одну строку, а не \n после каждой, нам нужно вводить ; после каждой команды

затем используется для объявления того, что должна делать наша функция, если логическое значение возвращает true

git branch -d $ 1 удалит локальную ветвь введенного нами параметра

& Amp; & Amp; этот логический оператор обеспечит выполнение обеих команд

git push origin - удалить $ 1 удалит удаленную ветвь введенного нами параметра

еще делает то, что должна делать вторая половина if-else

echo "удаленная ветвь не найдена" это строка, которую я хочу вернуть, если нет удаленной ветки

фи объявляет об окончании нашего оператора if-else

}; F ' закрывает нашу функцию

'complex' git alias for my branch named "security"