4

可能重复:
为 Git 存储库启用 ident 字符串

在我的项目中,每个源文件(无论是什么语言 - Java、Python、shell)都有一个注释行,其中包含源代码控制信息 - 分支、上次提交日期、提交者名称等。

这是通过使用由源代码管理应用程序自动替换的特殊占位符(例如$Branch$)来完成的。

是否有可能在 git 中实现类似的功能?

我在 Windows 上使用 Git 扩展,在 Linux 上使用尚未确定的 GUI,但我假设两者都只是调用 git 命令行工具的 GUI。

4

2 回答 2

5

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 和其他钩子。

于 2013-02-03T13:44:05.247 回答
4

您必须阅读Git 中的涂抹/清洁过滤器才能获得关键字替换的一些迭代。

Grok 部分“关键字扩展”,其中解释了扩展 $DATE$ 关键字的示例(并且必须进行反向操作)。在您的情况下,大多数将 $SOMEKEYWORD$ 扩展为版本字符串的工作都可以在后台执行git describe,干净的部分必须手动(您的手)实现

于 2013-02-03T23:05:52.043 回答