具有多个命令的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