相关疑难解决方法(0)

如何在没有不必要的重新编译的情况下使用C++代码提供Git提交哈希?

一个相当常见的要求,是:我想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)

c++ git makefile g++

5
推荐指数
2
解决办法
757
查看次数

如何使用 shell 脚本从 git repo 打印最新的提交 ID

我在 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 shell repo

5
推荐指数
1
解决办法
3811
查看次数

如何找出我在git中检出的版本?

可能重复:
如何在Git中检索当前提交的哈希值?

即什么是git相当于hg parentsvn info.

我可以在脚本中使用的答案的额外分数,即它给出'bbh653ad'而不是包含版本号的单词的负载

git parent

3
推荐指数
1
解决办法
515
查看次数

如何从R获取当前git commit的sha

有没有办法从R获取当前GIT提交的SHA?我需要通过函数调用(而不是硬字符串)来访问它。

我已将GIT用作版本控制系统进行分析,并希望在中间报告的脚注上打印SHA(我的工作草案以pdf格式保存,他们自己活着,而看着他们的情况并不能立即看出来。它们生成的那一刻;这会造成可再现性问题)。

供参考:我正在通过R Studio使用R 3.4.1,并通过r markdown创建报告。

git r sha rstudio r-markdown

3
推荐指数
2
解决办法
897
查看次数

标签 统计

git ×4

c++ ×1

g++ ×1

makefile ×1

parent ×1

r ×1

r-markdown ×1

repo ×1

rstudio ×1

sha ×1

shell ×1