一个相当常见的要求,是:我想myapp --version显示版本和Git提交哈希(包括存储库是否脏).该应用程序是通过一个Makefile(实际生成的qmake,但现在让它保持"简单")构建的.我非常精通Makefiles,但这个让我很难过.
我可以像这样轻松获得所需的输出:
$ git describe --always --dirty --match 'NOT A TAG'
e0e8556-dirty
Run Code Online (Sandbox Code Playgroud)
C++代码期望提交哈希值可用作预处理器宏GIT_COMMIT,例如:
#define GIT_COMMIT "e0e8556-dirty" // in an include file
-DGIT_COMMIT=e0e8556-dirty // on the g++ command line
Run Code Online (Sandbox Code Playgroud)
下面是我尝试将git describe输出检测到C++ 的几种不同方法.他们都没有完美的工作.
$(shell)功能.我们使用make的$(shell)函数来运行shell命令并将结果粘贴到make变量中:
GIT_COMMIT := $(shell git describe --always --dirty --match 'NOT A TAG')
main.o: main.cpp
g++ -c -DGIT_COMMIT=$(GIT_COMMIT) -o$@ $<
Run Code Online (Sandbox Code Playgroud)
这适用于干净的构建,但有一个问题:如果我更改Git哈希(例如通过提交或修改干净的工作副本中的某些文件),make不会看到这些更改,并且二进制文件不会重建.
version.h在这里,我们使用make recipe来生成version.h包含必要的预处理器定义的文件.目标是虚假的,因此它总是被重建(否则,它将始终被视为在第一次构建之后的最新版本).
.PHONY: version.h
version.h:
echo "#define …Run Code Online (Sandbox Code Playgroud) 我在 linux 环境中有以下 shell 脚本,其中 arr 有 git repo 路径列表,当我尝试运行此脚本时,我通过第 3 行进入该路径,但无法获取最新的提交 ID并保存在变量中,我在这段代码中缺少什么以及如何在该变量“commit_ID”中获取该提交 ID。
for i in "${arr[@]}"
do
cd $i
echo $i
commit_ID = git log -1
echo $commit_ID
done
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在Git中检索当前提交的哈希值?
即什么是git相当于hg parent或svn info.
我可以在脚本中使用的答案的额外分数,即它给出'bbh653ad'而不是包含版本号的单词的负载
有没有办法从R获取当前GIT提交的SHA?我需要通过函数调用(而不是硬字符串)来访问它。
我已将GIT用作版本控制系统进行分析,并希望在中间报告的脚注上打印SHA(我的工作草案以pdf格式保存,他们自己活着,而看着他们的情况并不能立即看出来。它们生成的那一刻;这会造成可再现性问题)。
供参考:我正在通过R Studio使用R 3.4.1,并通过r markdown创建报告。