在Visual C++中使用Git进行自动版本控制

Red*_*eye 8 c++ git visual-c++

我在VS2013中有一个C++项目.在过去的类似项目中,我使用SubWCRev和Subversion来自动生成版本号.我有一个这样的模板文件:

#define MAJOR_VERSION       2
#define MINOR_VERSION       2
#define MICRO_VERSION       0
#define BUILD_VERSION       $WCMODS?$WCREV$+1:$WCREV$$

#define QUOTE_(x) #x
#define QUOTE(x) QUOTE_(x)

#define BUILD_VERSION_STRING    QUOTE(MAJOR_VERSION.MINOR_VERSION.MICRO_VERSION.BUILD_VERSION)
Run Code Online (Sandbox Code Playgroud)

然后我运行SubWCRev作为预构建步骤来生成我在项目中包含的头文件以定义版本号.

我现在正在使用Git,并希望做类似的事情.我知道Git没有相应的修订号,但HEAD SHA会没问题.

似乎没有一种与Git相同的方法,我需要做一些不是我强项的脚本.Git Guru可以指出我正确的方向来实现这一目标吗?

Red*_*eye 6

我最终找到了一个非常有用的批处理文件,它实际上比我需要的更多:

https://github.com/Thell/git-vs-versioninfo-gen

它基本上与SubWCRev做了一个非常相似的工作,并生成一个头文件,我可以在我的VS项目中包含它来设置所有版本字符串.在对脚本进行了一些黑客攻击后,我完全按照自己的意愿行事.

这里也有一个C#版本:

https://github.com/jasperboot/git-vs-versioninfo


小智 1

我使用 git describe 的输出作为构建字符串。我不使用窗户。

这个例子在Linux下运行良好。

版本.h

#ifndef GIT_VERSION_H
#define GIT_VERSION_H
extern const char* git_version;
#endif
Run Code Online (Sandbox Code Playgroud)

version.c由awk生成

git describe | awk 'BEGIN { print "#include \"version.h\"" } { print "const char* git_version = \"" $$0 "\";"} END {}' > version.c
Run Code Online (Sandbox Code Playgroud)

短剑