【问题标题】:Is it possible to add the SHA of my current commit to the core file pattern?是否可以将我当前提交的 SHA 添加到核心文件模式?
【发布时间】:2018-08-26 19:10:39
【问题描述】:

我希望将 git sha 添加到核心文件模式中,以便我确切知道哪个提交用于生成核心文件。 有没有办法做到这一点?

【问题讨论】:

    标签: linux git coredump


    【解决方案1】:

    我不清楚您所说的“核心文件模式”是什么意思。 (特别是,当一个进程崩溃并且 Linux 内核生成一个核心转储时,它使用kernel.core_pattern。这个设置是系统范围的,而不是每个进程的。有一种方法可以运行一个辅助程序——参见How to change core pattern only for a particular application?——但这只能让你走这么远;你仍然必须编写那个程序。另见https://wiki.ubuntu.com/Apport。)但是这里有一个普遍的问题,它有一些hacky解决方案,所有这些都是一个非常明显的方法的变体,仍然是有点聪明。

    一般问题

    您将要进行的提交的哈希在您完成之前是未知的。更糟糕的是,即使您可以计算即将进行的提交的哈希值(您可以,但这很困难),如果您随后 更改将进入提交的某些已提交文件的内容,为了包含这个散列,你更改你所做的提交的内容,这意味着你得到一个不同的实际提交散列。

    总之,不可能在commit里面提交commit的commit hash。

    hacky 解决方案

    一般的想法是编写一个您在构建过程中使用的未跟踪文件,以便二进制文件包含提交哈希值很容易找到的地方。对于使用 Make 构建的项目,请参阅how to include git commit-number into a c++ executable? 了解一些方法。

    在构建 tarball 时可以使用相同的方法。 Git 可以使用 ident 过滤器将 file(blob 对象)的哈希 ID 嵌入到工作树文件中,但这是 ident 的 ID。 em>file,这通常没用。因此,如果您使用 git archive 生成 tar 或 zip 文件,则可以使用 export-subst,如 the gitattributes documentation 中所述并在 the git archive documentation 中提及。请注意,tar 或 zip 存档也直接保存提交哈希 ID。

    最后,您可以编写自己的自定义污点过滤器,将提交哈希 ID 嵌入到工作树文件中。这在没有等效的外部 make 进程运行来生成二进制文件的语言中可能很有用。这里的问题是,当污迹过滤器读取HEAD 时,它被设置为git checkout 完成之前的值,而不是它完成之后的值。这使得提取正确的提交哈希 ID 变得非常困难(如果甚至有一个正确的哈希 ID - 请注意,git describe 将在指示时附加 -dirty,以指示工作树与 HEAD 提交不匹配,在适当的时候)。

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多