正如其他人所提到的,您不能在同一提交期间将提交本身的 SHA-1 放入文件中。无论如何,这将是有限的,因为查看两个文件您将无法立即判断哪个是新的。
话虽如此,实际上有一种方法可以自动将版本跟踪信息放入提交的文件中。我为我当前的项目(FrauBSD;我正在开发的 FreeBSD 的一个分支)做了这个。
我不是通过使用 git-attributes 过滤器来实现的。虽然 git-attributes 过滤器可以轻松实现相反的效果(在结帐时将信息放入文件中),但我想要的是在提交时扩展某些关键字,以便数据进入存储库(例如,在“git push origin master”之后,github 在提交的文件中显示扩展值)。使用 git-attributes 过滤器实现后者非常困难,因为一个简单的“git diff”将调用 filter.clean 属性,并且在我的情况下,如果您将日期/时间信息放入扩展中,则具有每次执行“git diff”时的值更改都是不受欢迎且不可接受的。
所以我开发了一个 pre-commit 钩子和一个 commit-msg 钩子,它们共同作用,解决了如何(特别是在 FrauBSD 案例中)替换已提交文件中的以下内容的问题:
$FrauBSD$
在签入前使用类似于以下内容的内容(扩展值向上游发送以供其他人签出):
$FrauBSD: 文件路径 YYYY-MM-DD HH:MM:ZZ GMTOFFSET 提交者 $
当任何人在 github 上浏览文件或执行文件的签出或合并时,扩展的信息会随之而来。
注意:扩展的值永远不会改变,除非分别有另一个(不相关的)变化伴随。
例如,请参阅以下提交,其中我只是删除了文件的尾随换行符。提交包含删除尾随换行符以及 $FrauBSD$ 关键字中的日期/时间的碰撞:
https://github.com/freebsdfrau/FrauBSD/commit/060d943d86bb6a79726065aad397723a9c704ea4
为了产生那个提交,我做了大多数 [git] 开发人员都熟悉的事情:
- vi 许可证
- Shift-G # 转到文件末尾
- dd #删除当前行
- ZZ #保存文件并退出
- git diff # diff 显示删除尾随换行符
注意:diff 没有显示对 $FrauBSD$ 值的更改 [尚未]
- git 添加许可证
- git diff # 无(无未分级更改)
- git diff --cached # diff 显示删除尾随换行符
注意:diff [仍然] 不 显示对 $FrauBSD$ 值的更改
- git status # 显示修改后的许可证
- git commit # $EDITOR 出现
- Ctrl-Z # 将 $EDITOR 置于后台以便我们进行调查
- git diff --cached # diff [now] 显示 $FrauBSD$ 更新以及删除尾随换行符
- fg # 恢复 $EDITOR
- :问! # 退出编辑器而不做任何更改
注意:由于您中止了提交,$FrauBSD$ 已恢复
- git diff --cached # diff [再次] 只显示尾随换行符删除
- git commit #这次我们不会中止
- BumpZZ # 插入“Bump”,保存退出
- 文件按原样提交
注意:提交后无需对文件执行任何操作
那是因为我的项目中有以下文件:
- .git/hooks/pre-commit(../../.hooks/pre-commit 的符号链接)
- .git/hooks/commit-msg(../../.hooks/commit-msg 的符号链接)
- .hooks/pre-commit
- .hooks/commit-msg
- .filters/fraubsd-keywords
您可以在此处获得的初始版本:
“为预提交涂抹添加挂钩/过滤器”
https://github.com/freebsdfrau/FrauBSD/commit/63fa0edf40fe8f5936673cb9f3e3ed0514d33673
注意:过滤器由钩子使用(不在 git-attributes 中使用)。
这里有一个更新:
https-//github.com/freebsdfrau/FrauBSD/commit/b0a0a6c7b2686db2e8cdfb7253aba7e4d7617432
或者您可以在此处查看头部修订:
https-//github.com/freebsdfrau/FrauBSD/tree/master/.filters
https-//github.com/freebsdfrau/FrauBSD/tree/master/.hooks
注意:冒号更改为 - 在上面的 URL 中,所以我可以发布超过 2 个链接(因为声誉低)
享受,
FreeBSDFrau