具有多个命令的Git别名的语法

Mik*_*der 37 git

我想创建一个Git别名来执行多个命令,但我无法找到有关如何完成此操作的文档.

  1. 具有多个命令的Git别名的语法是什么?
  2. 这记录在哪里?

来自'man git-config'

   alias.*
Run Code Online (Sandbox Code Playgroud)

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 rev-parse --show-prefix来设置GIT_PREFIX.见git-rev-parse(1).

seh*_*ehe 44

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

$ git q
Run Code Online (Sandbox Code Playgroud)

输出:

a
b
Run Code Online (Sandbox Code Playgroud)

我认为这是(基本上)记录在man git-config下面alias.*

请注意,与普通别名不同,git命令应该包含git.这是因为它被视为shell命令,而不是git命令(请参阅问题中引用的联机帮助页).例如链

git init
Run Code Online (Sandbox Code Playgroud)

git commit --allow-empty -m "empty initial commit"
Run Code Online (Sandbox Code Playgroud)

有必要创造

"!git init; git commit --allow-empty -m \"empty initial commit\""
Run Code Online (Sandbox Code Playgroud)

别名.


bri*_*ta_ 22

说命令是echo aecho b(不是ab),为别名添加多个命令q:

从命令行:
git config alias.q '!echo a; echo b'

直接在配置文件中:

[alias]
    q = "!echo a; echo b"
Run Code Online (Sandbox Code Playgroud)

对于更复杂的事情,定义一个shell函数并调用它:
'!f() { echo a ; echo b ; }; f'

要将参数传递给命令,请参阅:
带位置参数的
Git别名Git Alias - 多个命令和参数

根据乔纳森威克利的评论

  • 谢谢,`'!f(){echo a; 回声b; }; f'`是我正在寻找的答案.我想迭代提供给别名的参数,`'!f(){for $ arg in $; do echo $ arg; 完成; }; f'` (3认同)