上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号。虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟,但少有文章提及如何具体在 Windows 平台来获得版本号。这让我有了迫切得到方法的希望。下面会具体实现如何在VS中使用Git版本号作为编译产生的文件版本号。
将 GIT 的 commit 作为 .Net 项目编译后生成dll的文件版本号主要有以下几个困难。
GIT 没有一个数字的序号,而是一个SHA散列码;
GIT 提供的命令在 linux 十分方便,在 Windows 下需要额外的工具。
第一个问题好解决,我们取当前文件夹 commit 的次数加上截取一段 SHA 码就可以作为文件版本号的最后一位。第二个问题目前想到的方法是调用 msysgit 提供的 Git Bash 来执行命令。
好了,首先我们依旧得找到 msysgit 的安装目录,一查之下头就大了,各个地方的路径都感觉不靠谱,最后还是选用了
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1
的InstallLocation
,当然也可以通过 temp 环境变量来获取路径,安装时选择第二或第三项:
然后参照 Git Bash 的快捷方式拼接了下 call 的语句。写了一个 sh 文件来获得版本号,并保存到文件:
# file name: git_ver.sh
#!/bin/bash
VER_FILE=git_version.tmp
LOCALVER=`git rev-list HEAD | wc -l | awk '{print $1}'`
VER=r$LOCALVER
VER="$VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
GIT_VERSION=$VER
echo $GIT_VERSION>$VER_FILE
<