1

我正在尝试创建一个 git 别名来显示自最后一个标签以来的所有提交。我的基础是我过去经常使用的这个 SO 答案。

目前,我正在尝试使用如下git config --global alias.*命令:

git config --global alias.summary 'log `git describe --tags --abbrev=0`..HEAD --oneline'

这注册了一个名为“summary”的新“命令”,它将呈现自最后一个标签以来的所有提交消息。

但是,当我运行时git summary,git 会抛出此错误消息:

致命:模棱两可的参数“git”:未知的修订版或路径不在工作树中。

使用 '--' 将路径与修订分开,如下所示:

'git <command> [<revision>...] -- [<file>...]'

对我来说,这看起来像git describe --tags --abbrev=0嵌套在反引号内的内部命令没有正确评估。

我怎样才能解决这个问题?

4

2 回答 2

1

我发现您需要使用bang /!运算符向 git 标记别名应该在 shell 中执行。

附带说明一下,替换git describe --tags --abbrev=0$(git describe --tags --abbrev=0),会导致命令在放入配置文件的 [alias] 部分之前执行。这会导致带有最新标签版本的别名命令被烘焙到别名中,而不是动态查找最新的 git 标签。

IE:如果存储库有标签1.1.02.0.0并且我尝试在 from 上添加几个提交的别名2.0.0,它将生成以下别名命令:

'!git log 2.0.0..HEAD --oneline;'

这意味着2.0.0现在固定为要检查的标签,而不是动态查找相关存储库的最新标签。

因此,要修复我的初始 git 别名,我需要!git在 alias 命令的开头添加:

git config --global alias.summary '!git log `git describe --tags --abbrev=0`..HEAD --oneline;'
于 2016-02-17T23:40:09.293 回答
1

编辑:我原来的建议仍然成立,但也检查一下: 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
于 2016-02-17T22:14:00.067 回答