具有多个命令的Git别名的语法
我想创建一个Git别名来执行多个命令,但我无法找到如何完成这些文档。
从'man git-config'
alias.*
git(1)命令包装的命令别名 - 例如在定义“alias.last = cat-file commit HEAD”之后,调用“git last”等同于“git cat-file commit HEAD”。 为避免混淆和脚本使用的麻烦,隐藏现有Git命令的别名将被忽略。 参数被空格分开,支持通常的shell引用和转义。 报价对和反斜杠可用于引用它们。
如果别名扩展以感叹号为前缀,则将其视为shell命令。 例如,定义“alias.new =!gitk - all - not ORIG_HEAD”,调用“git new”相当于运行shell命令“gitk - all - not ORIG_HEAD”。 请注意,shell命令将从存储库的顶级目录中执行,该目录可能不一定是当前目录。 GIT_PREFIX被设置为通过从原始当前目录运行git rev-parse --show-prefix返回。 请参阅git-rev-parse(1)。
$ git config alias.q '!echo a; echo b'
$ git q
输出:
a
b
我认为这(基本上)记录在man git-config
下的alias.*
请注意,与正常别名不同,git命令应该包含git。 它是由事实引起的,它被视为shell命令,而不是git命令(请参阅问题中引用的manpage)。 例如链接
git init
和
git commit --allow-empty -m "empty initial commit"
有必要创建
"!git init; git commit --allow-empty -m "empty initial commit""
别名。
假设这些命令是echo a
和echo b
(不是a
和b
),为别名q
添加多个命令:
从命令行:
git config alias.q '!echo a; echo b'
直接在配置文件中:
[alias]
q = "!echo a; echo b"
对于更复杂的事情,定义一个shell函数并调用它:
'!f() { echo a ; echo b ; }; f'
要将参数传递给命令,请参阅:
具有位置参数的Git别名
Git别名 - 多个命令和参数
基于Jonathan Wakely的评论
附录答案:通常我需要更复杂的命令来决定通过位置参数执行哪些操作,并通过参数分支或通过参数或输入文件循环。
这样的命令对于单行内容来说太复杂,并且很难在一行上进行读取和编辑。 但是我发现了一个真正简单的方法来从文件中完成非常复杂的命令:
假定您的存储库中有一个名为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
将定义的别名写入文件。
链接地址: http://www.djcxy.com/p/49763.html