我正在尝试创建一个git别名来显示自上一个标记以来的所有提交。我的基础是过去我经常使用的这个答案。
目前,我正在使用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
无法正确评估。
我该如何解决这个问题?
答案 0 :(得分:0)
我建议将其创建为bash函数。我不认为Git会正确地解析这个问题,净效果会是一样的。您可以将其添加到~/.bashrc
,以便在shell启动时自动配置它。
gitsummary() {
git log `git describe --tags --abbrev=0`..HEAD --oneline
}
您可以像执行标准应用一样执行bash功能,所以就像这样
cd /my/git/dir
gitsummary
答案 1 :(得分:0)
我已经发现你需要使用 bang / !
运算符来标记别名应该在shell中执行的git。
在旁注中,将git describe --tags --abbrev=0
替换为$(git describe --tags --abbrev=0)
会导致命令在放入配置文件的[alias]部分之前执行。这会导致alias命令将最新的标记版本烘焙到别名中,而不是动态查找最新的git标记。
IE:如果存储库具有标记1.1.0
和2.0.0
,并且我尝试从2.0.0
添加一些别名,则会生成以下别名命令:
'!git log 2.0.0..HEAD --oneline;'
这意味着2.0.0
现在已被修复为要检查的标记,而非动态查找相关存储库的最新标记。
因此,要修复我的初始git别名,我需要在alias命令的开头添加 !git
:
git config --global alias.summary '!git log `git describe --tags --abbrev=0`..HEAD --oneline;'