如何为 Git 存储库启用 ident 字符串?
如何对 Git 存储库中的文件启用 ident $Id$
?
How do I enable ident $Id$
on files in a Git repository?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何对 Git 存储库中的文件启用 ident $Id$
?
How do I enable ident $Id$
on files in a Git repository?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
总结:在产品中嵌入版本信息的推荐方法是使用构建系统;有关详细信息和替代方法,请参阅下文。
在 Git 中(我认为通常在具有原子提交的其他 VCS 系统中也是如此),不存在诸如单个文件的版本之类的东西。
Git 确实支持
$Id:$
关键字的按需扩展,但是:ident
属性 设置(在树中的“.gitattributes”文件中,或在“.git/info/attributes”中用于本地存储库设置)。$Id:$的 sha-1
)。做出这种选择的原因是,Git 不会触及分支切换或回滚期间未更改的文件;如果“$Id:$”扩展到修订信息,则需要更新每个版本控制文件,例如在切换分支时。Git 支持相当广泛的
$Format:...$
占位符,这些占位符可扩展为提交信息(例如$Format:%H$
替换为提交哈希),但是:export-subst
属性控制。嵌入版本信息的推荐方法是通过构建系统(在构建阶段)进行;例如,参见 Git Makefile 和 GIT- git.git 存储库的 Git Web 界面中 Makefile 使用的 VERSION-GEN 脚本。
但是,您可以(ab)使用 clean/smudge 过滤器驱动程序(通过
filter
属性)来获得类似 CVS 的关键字扩展,在结帐时扩展关键字,并在将内容输入存储库时清理它们。Summary: The recommended way of embedding version information in a product is to use the build system for that; see below for details and alternate approaches.
In Git (and I think usually also in other VCS systems with atomic commits) there is no such thing like version of a single file.
Git does support on-demand expansion of
$Id:$
keyword, but:ident
attribute set (in '.gitattributes' file in tree, or in '.git/info/attributes' for local repository settings).$Id:<sha-1 of blob>$
). The reason for this choice is that Git does not touch files that have not changed during branch switching or rewinding; if '$Id:$' expanded to revision info it would require to update every version-controlled file e.g. when switching branches.Git supports quite a wide set of
$Format:...$
placeholders which expands to commit information (e.g.$Format:%H$
replaced by a commit hash) but:export-subst
attribute.The recommended way of embedding version information is to do it via the build system (in a build stage); see for example Git Makefile and GIT-VERSION-GEN script used by Makefile in the Git web interface for the git.git repository.
You can however (ab)use a clean/smudge filter driver (via
filter
attribute) to get CVS-like keyword expansion, expanding keywords on checkout, and cleaning them up on entering contents to the repository.您可以通过在
.gitattributes
文件中添加您想要此功能的文件的模式,然后添加ident
来实现此目的。这将在检出文件时将 $Id$ 替换为 $Id:<40 位 SHA>$。但请注意,它不会像 CVS/SVN 那样为您提供文件的修订号。示例:
链接到 gitattributes(5) 手册页
You can do this by adding a pattern for which files you want this functionality followed by
ident
in the.gitattributes
file. This will replace $Id$ with $Id:<40-digit SHA>$ on checkout of the file. Notice though that it won't give you a revision number of the file as in CVS/SVN.Example:
Link to gitattributes(5) Manual Page
Git 的 ident 不执行 $Id$ 在其他版本控制系统中执行的操作。作为一个组合,将 RCS 与 git 一起使用:RCS 用于单个文件修订,而 git 对整个项目进行检查点。正如我所说,这是一个拼凑,但它确实有点道理(有时对于某些事情)。
Git's ident does not do what $Id$ does in other versioning systems. As a kludge, use RCS along with git: RCS for individual file revisions and git to checkpoint the project as a whole. As I said, this is a kludge but it does kinda make sense (sometimes for some things).
Jakub Narębski 在 他的回答(十多年前):
批评是(由Arioch 'The在评论)
使用 Git 2.27(2020 年第 2 季度),git 内容过滤器不再无能为力!
Git 2.27 为 smudge/clean 转换过滤器提供更多信息(例如,除了已经给出的路径之外,正在转换的 blob 出现的树形对象) 。
请参阅 提交 0c0f8a7、提交 4cf76f6, 提交3f26785,提交 dfc8cdc,提交 13e7ed6, 提交 c397aac,提交 ab90eca(2020 年 3 月 16 日) ,并提交 a860476(2020 年 3 月 10 日),作者:brian m.卡尔森(``)。
(由 Junio C Hamano --
gitster
-- 合并于 提交 4e4baee,2020 年 3 月 27 日)和:
Jakub Narębski suggested in his answer (more than 10 years ago ):
The criticism is (by Arioch 'The in the comments)
With Git 2.27 (Q2 2020), git content filters are powerless no more!
Git 2.27 provides more information (e.g. the object of the tree-ish in which the blob being converted appears, in addition to its path, which has already been given) to smudge/clean conversion filters.
See commit 0c0f8a7, commit 4cf76f6, commit 3f26785, commit dfc8cdc, commit 13e7ed6, commit c397aac, commit ab90eca (16 Mar 2020), and commit a860476 (10 Mar 2020) by brian m. carlson (``).
(Merged by Junio C Hamano --
gitster
-- in commit 4e4baee, 27 Mar 2020)And: