在 git 命令别名中嵌套反引号
Nest backticks inside a git command alias
我正在尝试创建一个 git 别名来显示自上一个标记以来的所有提交。我基于我过去经常使用的这个 SO 答案。
目前,我正在尝试使用 git config --global alias.*
命令,如下所示:
git config --global alias.summary 'log `git describe --tags --abbrev=0`..HEAD --oneline'
这将注册一个名为 'summary' 的新 'command',它将呈现自上一个标记以来的所有提交消息。
但是,当我运行 git summary
、git 抛出这个错误信息时:
fatal: ambiguous argument '`git': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
对我来说,这看起来像是嵌套在反引号内的内部命令 git describe --tags --abbrev=0
无法正确计算。
我该如何解决这个问题?
编辑:我最初的建议仍然有效,但也请检查一下:
Git alias with shell variable expansions
我建议改为将其创建为 bash 函数。我不认为 Git 会正确解析它,而且最终效果是一样的。您可以将其添加到 ~/.bashrc
以在 shell 启动时自动配置它。
gitsummary() {
git log `git describe --tags --abbrev=0`..HEAD --oneline
}
您可以像执行标准应用程序一样执行 bash 功能,就像这样
cd /my/git/dir
gitsummary
我发现您需要使用 bang/!
运算符来标记 git 别名应在 shell。
附带说明,将 git describe --tags --abbrev=0
替换为 $(git describe --tags --abbrev=0)
,会导致命令在被放入配置文件的 [alias] 部分之前执行。这会导致带有最新标签版本的别名命令被烘焙到别名中,而不是动态查找最新的 git 标签。
IE:如果存储库具有标签 1.1.0
和 2.0.0
,并且我尝试在 2.0.0
的几次提交上添加别名,它将生成以下别名命令:
'!git log 2.0.0..HEAD --oneline;'
这意味着 2.0.0
现在已固定为要检查的标签,而不是动态查找相关存储库的最新标签。
因此,为了修复我的初始 git 别名,我需要将 !git
添加到别名命令的开头:
git config --global alias.summary '!git log `git describe --tags --abbrev=0`..HEAD --oneline;'
我正在尝试创建一个 git 别名来显示自上一个标记以来的所有提交。我基于我过去经常使用的这个 SO 答案。
目前,我正在尝试使用 git config --global alias.*
命令,如下所示:
git config --global alias.summary 'log `git describe --tags --abbrev=0`..HEAD --oneline'
这将注册一个名为 'summary' 的新 'command',它将呈现自上一个标记以来的所有提交消息。
但是,当我运行 git summary
、git 抛出这个错误信息时:
fatal: ambiguous argument '`git': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
对我来说,这看起来像是嵌套在反引号内的内部命令 git describe --tags --abbrev=0
无法正确计算。
我该如何解决这个问题?
编辑:我最初的建议仍然有效,但也请检查一下: Git alias with shell variable expansions
我建议改为将其创建为 bash 函数。我不认为 Git 会正确解析它,而且最终效果是一样的。您可以将其添加到 ~/.bashrc
以在 shell 启动时自动配置它。
gitsummary() {
git log `git describe --tags --abbrev=0`..HEAD --oneline
}
您可以像执行标准应用程序一样执行 bash 功能,就像这样
cd /my/git/dir
gitsummary
我发现您需要使用 bang/!
运算符来标记 git 别名应在 shell。
附带说明,将 git describe --tags --abbrev=0
替换为 $(git describe --tags --abbrev=0)
,会导致命令在被放入配置文件的 [alias] 部分之前执行。这会导致带有最新标签版本的别名命令被烘焙到别名中,而不是动态查找最新的 git 标签。
IE:如果存储库具有标签 1.1.0
和 2.0.0
,并且我尝试在 2.0.0
的几次提交上添加别名,它将生成以下别名命令:
'!git log 2.0.0..HEAD --oneline;'
这意味着 2.0.0
现在已固定为要检查的标签,而不是动态查找相关存储库的最新标签。
因此,为了修复我的初始 git 别名,我需要将 !git
添加到别名命令的开头:
git config --global alias.summary '!git log `git describe --tags --abbrev=0`..HEAD --oneline;'