linux - 是否可以将我当前提交的 SHA 添加到核心文件模式?
问题描述
我希望将 git sha 添加到核心文件模式中,这样我就可以确切地知道哪个提交用于生成核心文件。有没有办法做到这一点?
解决方案
我不清楚“核心文件模式”是什么意思。(特别是,当一个进程崩溃并且 Linux 内核生成一个核心转储时,它使用kernel.core_pattern
. 这个设置是系统范围的,而不是每个进程的。有一种方法可以运行一个辅助程序 - 请参阅如何更改核心模式仅适用于一个特定的应用程序? -但这只能让你到目前为止;你仍然需要编写那个程序。另见https://wiki.ubuntu.com/Apport。)但是这里有一个普遍的问题,它有一些 hacky 解决方案,所有这些都是一个非常明显的方法的变体,它仍然有点聪明。
一般问题
您将要进行的提交的哈希在您提交之前是未知的。更糟糕的是,即使您可以计算您将要进行的提交的哈希值(您可以,但这很困难),如果您随后更改将进入提交的某些已提交文件的内容,以便包含此哈希值,您更改了您所做的提交的内容,这意味着您获得了不同的实际提交哈希。
简而言之,不可能在 commit 内部提交 commit 的 commit hash。
骇人听闻的解决方案
一般的想法是编写一个在构建过程中使用的未跟踪文件,以便二进制文件在某个容易找到的地方包含提交哈希。对于使用 Make 构建的项目,请参阅如何将 git commit-number 包含到 c++ 可执行文件中?对于一些方法。
构建 tarball 时可以使用相同的方法。Git 能够使用ident过滤器将文件(blob 对象)的哈希 ID 嵌入到工作树文件中,但这是文件的 ID ,通常没有用处。因此,相反,如果您用于生成 tar 或 zip 文件,则可以使用gitattributes 文档中所述和文档中提到的. 请注意,tar 或 zip 存档还直接保存提交哈希 ID。git archive
export-subst
git archive
最后,您可以编写自己的自定义涂抹过滤器,将提交哈希 ID 嵌入到工作树文件中。这在没有等效的外部make进程运行来生成二进制文件的语言中可能很有用。这里的问题是,当涂抹过滤器读取时HEAD
,它被设置为完成之前的值git checkout
,而不是完成之后的值。这使得提取正确的提交哈希 ID 变得非常困难(如果甚至有一个正确的哈希 ID——注意,如果有指示,git describe
将附加以指示工作树与提交-dirty
不匹配,在适当的时候)。HEAD
推荐阅读
- python - 给定 3 个列表,找出前两个列表中哪两个元素的总和尽可能接近第三个列表中的每个值
- python - 我为所有用户(Windows 10)安装了 Python,但它仍然创建了用户安装
- excel - 跨多个工作表的总和和索引匹配
- mysql - SQL-使用另一个表的列的值更新列的值
- ios - 使用UIKit Compositional Layout collectionView以编程方式滚动特定项目或偏移量?
- java - 添加模块给了我一个解决依赖错误
- angular - 当我点击它时,mat-form-field 会中断
- javascript - 如何根据登录用户部门将现代 SharePoint 根站点重定向到不同的页面?
- javascript - Ngx 引导和输入文件元素
- javascript - 冻结 HTML 表格中的多个标题