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

我想创建一个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 aecho b (不是ab ),为别名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

    上一篇: Syntax for Git aliases with multiple commands

    下一篇: Multiple Commands and Parameters