可能重复:
为 Git 存储库启用 ident 字符串
在我的项目中,每个源文件(无论是什么语言 - Java、Python、shell)都有一个注释行,其中包含源代码控制信息 - 分支、上次提交日期、提交者名称等。
这是通过使用由源代码管理应用程序自动替换的特殊占位符(例如$Branch$)来完成的。
是否有可能在 git 中实现类似的功能?
我在 Windows 上使用 Git 扩展,在 Linux 上使用尚未确定的 GUI,但我假设两者都只是调用 git 命令行工具的 GUI。
可能重复:
为 Git 存储库启用 ident 字符串
在我的项目中,每个源文件(无论是什么语言 - Java、Python、shell)都有一个注释行,其中包含源代码控制信息 - 分支、上次提交日期、提交者名称等。
这是通过使用由源代码管理应用程序自动替换的特殊占位符(例如$Branch$)来完成的。
是否有可能在 git 中实现类似的功能?
我在 Windows 上使用 Git 扩展,在 Linux 上使用尚未确定的 GUI,但我假设两者都只是调用 git 命令行工具的 GUI。
Git 不支持这些占位符,而且可能永远不会支持。
相反,自动生成包含git describe
命令输出的源文件,并在编译应用程序时包含它。或者您可以生成一些配置文件(JSON 或任何您想要的)。
要生成带有版本信息的 C++ 标头,请使用这样的 shell 脚本(您可以将这些命令直接添加到您的 makefile 中):
(
echo '/* Generated file, do not edit. */'
echo '#define APP_VERSION "'`git describe`'"'
echo '#define APP_VERSION_DATE "'`git log -n 1 --format=%ai`'"'
) > version.h
要为脚本语言执行此操作,您可以使用 post-commit 和其他钩子。
您必须阅读Git 中的涂抹/清洁过滤器才能获得关键字替换的一些迭代。
Grok 部分“关键字扩展”,其中解释了扩展 $DATE$ 关键字的示例(并且必须进行反向操作)。在您的情况下,大多数将 $SOMEKEYWORD$ 扩展为版本字符串的工作都可以在后台执行git describe
,干净的部分必须手动(您的手)实现