我正在尝试使用NAnt任务设置构建服务器。我有一些我想要构建的Git存储库,但是我对结果的版本控制有问题。
如何对库(dll)进行版本设置,以便每个版本都为每个版本使用一个数字? 我知道Git没有像SVN那样的修订号,而是某种Hash。我想过使用提交日期。我只会在中央服务器上构建主服务器,所以所有提交都会增加(合并日期)。
如果我能得到日期的整数表示,我可以使用它(YYMMDD)。
现在我将使用NAnt做所有很酷的东西:),Git是否提供了获取最新提交日期的方法?
答案 0 :(得分:4)
你想要
git log -1 --pretty=format:%cd HEAD
头是可选的。如果没有指定,则推断出。
答案 1 :(得分:3)
我知道这不是你要求的,但是如果你想使用版本号,那么git-describe是一个选项。
我用它来为我的库和程序提供版本信息。由于我使用版本格式X.Y.Z
,git-describe对我来说非常适合。它还有一个额外的好处,也是为我提供最新提交的提交ID,所以我总是知道库/程序编译的源历史记录中的哪一点。
要使用git-describe,您必须使用签名标签。创建标记时,我使用vX.Y
格式。然后,git-describe将使用格式vX.Y-Z-gC
附加补丁和提交信息,其中X是主要版本,Y是次要版本,Z是补丁级别,C是git提交ID。
例如,我创建了一个提交:
$ git tag -s v0.2 -m "Creating release 0.2"
$ git tag
v0.0
v0.1
v0.2
$ git describe --long --abbrev=7
0.2.0.gbb871fd
然后,我可以使用以下内容推导出具有补丁级别的版本:
GIT_DESCRIBE=`git describe --long --abbrev=7 |sed -e 's/-/./g' -e 's/^v//g'`
GIT_MAJOR=`echo ${GIT_DESCRIBE} |cut -d. -f1`
GIT_MINOR=`echo ${GIT_DESCRIBE} |cut -d. -f2`
GIT_PATCH=`echo ${GIT_DESCRIBE} |cut -d. -f3`
GIT_COMMIT=`echo ${GIT_DESCRIBE} |cut -d. -f4`
echo "${GIT_DESCRIBE}"
0.2.53.g00e0e11
echo "${GIT_MAJOR}.${GIT_MINOR}.${GIT_PATCH}.${GIT_COMMIT}"
0.2.53.g00e0e11
在上面的输出中,自创建最后一个标记以来已经有53次提交(修补),00e0e11
是修订历史记录中最新提交的部分提交ID。
获得解析后的版本信息后,我可以创建一个C头文件来定义在源代码中使用的版本号:
cat << EOF > lib_version.h
#undef MYLIB_VER_MAJOR
#undef MYLIB_VER_MINOR
#undef MYLIB_VER_PATCH
#undef MYLIB_VER_COMMIT
#undef MYLIB_VERSION
#define MYLIB_VER_MAJOR ${GIT_MAJOR}
#define MYLIB_VER_MINOR ${GIT_MINOR}
#define MYLIB_VER_PATCH ${GIT_PATCH}
#define MYLIB_VER_COMMIT "${GIT_COMMIT}"
#define MYLIB_VERSION "${GIT_DESCRIBE}"
EOF
我使用了与上面类似的技术,使用autoconf(和朋友)和Xcode的外部构建目标(实际上我的所有iOS应用程序都是版本化的)在包中生成版本信息。
以下是实现上述内容的真实示例(包含源代码):http://bindle.github.com/LdapKit/请注意,版本信息显示在文档中,每次重新生成文档时都会更新。
答案 2 :(得分:2)
这为您提供最新提交(即HEAD)的提交时间作为UNIX时间戳(自纪元以来的秒数,即1970年1月1日的00:00:00 UTC),这应该是您想要的:
% git show -s --format='format:%ct' HEAD
1334298121
然后您可以使用日期将其转换为您提到的YYMMDD格式,还可以添加其他内容:
% date -r `git show -s --format='format:%ct' HEAD` +"foobar-%C%y%m%d.zip"
foobar-20120413.zip
(我在%C
前面添加了世纪,因为这似乎是理所当然的事情,但你当然可以省略。foobar
和.zip
只是一个例子。如何直接生成文件名。)
您还可以选择其他一些格式,有关详细信息,请参阅git show --help
:
% git show -s --format='format:%cd' HEAD
Fri Apr 13 14:22:01 2012 +0800
% git show -s --format='format:%cD' HEAD
Fri, 13 Apr 2012 14:22:01 +0800
% git show -s --format='format:%cr' HEAD
3 months ago
% git show -s --format='format:%ct' HEAD
1334298121
% git show -s --format='format:%ci' HEAD
2012-04-13 14:22:01 +0800