在Makefile内部运行时,无法打印git提交哈希(使用git-pretty)



我正试图使用"git——漂亮的"Makefile中的格式。

下面是我的Makefile

#CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- | grep -o '^.{7}') # works
CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- ../inter/local.py | grep -o '^.{7}') # doesn't work, returns empty string
$(info $$CUR_LOC_VERSION is [${CUR_LOC_VERSION}])

我希望它显示一个提交哈希,但它返回空字符串。

$CUR_LOC_VERSION is []

但是,当直接在shell内部运行(而不是通过Makefile调用(时,上面的命令运行良好

非常感谢任何指点。

目录结构

.
|-- inter
|   |-- local.py
|
`-- vhdl
|-- Makefile

我无法解释为什么您当前的版本不起作用。但请注意,如果您想获得缩写哈希的特定大小,您可以直接执行该操作,而无需使用grep。刚刚运行:

git log -n1 --format=%h --abbrev=7

%h格式选项显示一个缩写散列,--abbrev表示要使用的字符数。

根据上面的更多调查,我怀疑当你运行这个程序时,你的工作目录并不是你想象的那样。如果我运行git log -n1 -- nosuchfile(使用一个不存在的文件(,我不会像我预期的那样收到任何错误消息;我只是没有输出。这有点令人困惑,但它让我相信,当您运行这个git命令时,../inter/local.py并不存在。尝试将pwd添加到shell命令中,以便在运行git:之前打印出工作目录

CUR_LOC_VERSION:= $(shell pwd; git log --format=%h -n1 -- ../inter/local.py)

看看输出是什么。

最新更新