Синтаксис для псевдонимов 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"]()