我想创建 Git 钩子,它将填充我将要在源代码中创建的文件(基本上是变量替换)的提交的提交 ID。这可以用 Git 实现吗?或者事实上,通过将变量解析为 git id,我将更改 sha 1,从而导致“先有鸡还是先有蛋”的问题。
我针对类似情况使用的解决方案是这样的:
- 把绳子放进去
$Id$
您想要识别的文件中的某个位置(例如test.html
),可能在文件的注释或其他非功能部分中,不会引起问题。
- In your
.gitattributes
,用以下标记有问题的文件ident
关键字(例如*.html ident
).
这样做的结果是,当git checkout
将文件从对象数据库复制到您的工作目录中,它会扩展$Id$
要读取的字符串$Id: <sha-1 of file>$
, and git add
当您想要签入该文件时,会反转该转换,因此对象数据库中该文件的版本仅包含$Id$
,而不是扩展形式。
这是一个开始,但不幸的是,找到包含具有特定哈希值的文件的提交并不那么容易,而且也不一定是一对一的。因此,此外,我还用export-subst
属性(例如*.html ident export-subst
in .gitattributes
),并添加一个附加字符串,例如$Format:%ci$ ($Format:%h$)
文件中的某处也是如此。
git checkout
and git add
不过,不会影响这些标签,因此我的存储库中的版本始终具有该字符串。为了扩展这些标签,您必须使用git archive
创建项目特定版本的 tar 包(或 .zip),然后使用它来部署该版本 - 您将无法仅复制文件,或者make install
或者无论如何,因为git archive
是唯一可以扩展这些标签的东西。
我作为示例给出的两个标签扩展为YYYY-MM-DD HH:MM:SS +TZOFFSET (HASH)
,其中HASH
在这种情况下是实际的提交哈希,因此它更有用。
您可以找到其他可能有用的$Format:$
中的说明符git log
帮助页面下--pretty-format
说明符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)