提交时如何将 Git 提交 ID 填充到文件中?

2024-01-02

我想创建 Git 钩子,它将填充我将要在源代码中创建的文件(基本上是变量替换)的提交的提交 ID。这可以用 Git 实现吗?或者事实上,通过将变量解析为 git id,我将更改 sha 1,从而导致“先有鸡还是先有蛋”的问题。


我针对类似情况使用的解决方案是这样的:

  1. 把绳子放进去$Id$您想要识别的文件中的某个位置(例如test.html),可能在文件的注释或其他非功能部分中,不会引起问题。
  2. 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(使用前将#替换为@)

提交时如何将 Git 提交 ID 填充到文件中? 的相关文章

  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供
  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • Git:从 master 以外的分支克隆

    我正在尝试从 Github 的存储库中提取数据 但我不想克隆主分支 我想克隆其他一些分支 当我尝试时git clone
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa

随机推荐

  • bash 合并多行

    我有一个文件看起来像 id001 success 100 id002 success 99 id002 failed 1 id003 failed 100 id004 success 50 id004 failed 50 我想将其格式化为
  • 用 Java 获取本月的最后一个星期五

    我正在开发一个项目 要求将日期计算为给定月份的最后一个星期五 我想我有一个仅使用标准 Java 的解决方案 但我想知道是否有人知道更简洁或更高效的解决方案 以下是我今年测试的内容 for int month 0 month lt 13 mo
  • 如何让 EFCore 内存数据库自动递增非键字段

    我们有一个以 guid 为键的实体 以及另一个基于自动递增 int 属性的人类可读键 运行应用程序时 这将按预期工作 出于测试目的 我们使用 EF 内存数据库 但这似乎只会自动递增列 如果它也是键 使用属性注释属性或 Fluent API
  • 如何从 google place api 获取营业时间

    这里我有一个工作正常的代码 所以这里是简单的谷歌位置代码 它根据位置向我显示一个位置 我在每个标记上添加一个标签 这样 http jsbin com UqafeCI 4 edit http jsbin com UqafeCI 4 edit
  • 您必须为 TextView android 错误提供资源 ID

    我一整天都在尝试解决这个错误 我不明白为什么我的 logcat 打印 05 06 21 45 59 559 ERROR ConversationList 9023 We have chats 05 06 21 45 59 609 ERROR
  • 使用php邮件功能有限制吗?

    我正在使用 php 和 mysql 我将发送 10k 一万多 封电子邮件来更新我的订阅者 这是我第一次发送它们 我将使用 php 邮件功能 基本上这就是我要做的 首先从数据库中获取数据 Select name email FROM data
  • 如何处理 AES CTR 的 IV/Nonce/Counter?

    import javax crypto Cipher public abstract class Crypto private static final String CIPHER ALGORITHM AES CTR NoPadding p
  • numpy ValueError 形状未对齐

    所以我正在尝试改编迈克尔 尼尔森的神经网络http neuralnetworksanddeeplearning com chap1 html http neuralnetworksanddeeplearning com chap1 html
  • 错误[Ljava.lang.Object;将 X509Certificate 的数组列表转换为数组时,无法转换为 [Ljava.security.cert.X509Certificate

    我对这个 ssl 和证书很陌生 我有一个 jks 文件 其中包含服务器信任的一些证书 我试图从 jks 文件中读取所有证书并将其返回到 getAcceptedIssuers 方法 证书的类型为 X509Certificate 我实现的方法正
  • TabBarView 页面未正确重建

    我正在尝试在每一页上显示选项卡编号TabBarView 通过读取其索引TabController 但由于某种原因 即使在日志中打印了正确的值 该值在视觉上似乎也没有正确更新 import package flutter material d
  • iconv() 与. utf8_encode()

    当您有一个与 UTF 8 不同的字符集并且需要将其转换为 JSON 格式以将其迁移到数据库时 可以在 PHP 中使用两种方法 调用 utf8 encode 和 iconv 我想知道哪一种性能更好 什么时候方便使用其中一种 当您的字符集与 U
  • 添加内部超链接到 pdf

    我有一个 PDF 文档 我想向其中添加内部超链接 具体来说 第 1 页包含一个我想要使其可点击的目录 我的想法是在第 1 页的预定位置创建矩形框 该矩形框应链接到第 2 3 我发现这篇文章讨论了使用上面描述的方法添加内部超链接 http b
  • 无法在文件中查找字符串并使用 Inno Setup 填充它?

    I have demo properties文件 我可以加载文件并迭代以获取其中存在的所有值 hibernate connection username jack hibernate connection password queen hi
  • 减小 Excel 文件大小 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在一家excel questions tagged excel应用程序 并为用户提供一个菜单以在该 Excel 应用程序 Excel 工
  • Asp.Net 拒绝用户访问某些页面

    如何允许用户访问我的 Web 应用程序 但拒绝他们访问特定页面 我希望允许更多用户使用我构建的应用程序 但有几个页面我不希望他们能够访问 这是我现在在 Web config 中的内容
  • Angular 6:onChange mat-slide-toggle 条件验证从对象数组中仅选择一个选项

    我有一份清单mat slide toggle 一次只有一个滑块将保持启用状态 而其他滑块将保持禁用状态 现在 当单击该启用的滑块时 其值将被更改 同时其他滑块列表将被启用以供选择 一旦选择一个滑块 其他滑块将被禁用 所以 简而言之 整个数组
  • 为什么字节码编程不如汇编编程那么流行或盛行?

    您可以在互联网上看到汇编代码和汇编编码器 但几乎没有字节码 这是为什么 汇编编程的需求和优点也适用于字节码编程 字节码编程远不如汇编编程流行 常见的另一个原因是字节码的通用性 它的简单性 字节码指令集主要是 ultra RISC 非常简单的
  • 为什么在 Dao 设计模式或其他设计模式中使用接口

    请参阅以下 Dao 设计模式的组成部分 数据访问对象模式或 DAO 模式用于将低级数据访问 API 或操作与高级业务服务分开 以下是数据访问对象模式的参与者 数据访问对象接口 该接口定义要在模型对象上执行的标准操作 数据访问对象具体类 该类
  • TypeScript 编译中的实验装饰器警告

    我收到警告 对装饰器的实验性支持是一项在未来版本中可能会发生变化的功能 设置 experimentalDecorators 选项 以删除此警告 即使我的 tsconfig json 中的compilerOptions具有以下设置 emitD
  • 提交时如何将 Git 提交 ID 填充到文件中?

    我想创建 Git 钩子 它将填充我将要在源代码中创建的文件 基本上是变量替换 的提交的提交 ID 这可以用 Git 实现吗 或者事实上 通过将变量解析为 git id 我将更改 sha 1 从而导致 先有鸡还是先有蛋 的问题 我针对类似情况