使用 GitHub App 自动化 Git 提交时间戳
如果你曾经尝试过证明某个 Git 提交是何时发生的,你就会知道那套手动流程:为提交哈希创建加密收据,将 .ots 文件存储在某个持久化的位置,把收据映射回对应的提交,然后对每个重要的分支和仓库重复这一过程。漏掉一个提交,你的在先技术记录就会出现缺口。
Timestamp GIT 用一款 GitHub App 取代了这套流程,自动为 Git 提交添加时间戳。本文关注的是自动化路径,而非底层的加密概念。关于存在性证明的背景知识及其重要性,请参阅代码的存在性证明:它是什么以及为什么重要。
你可以消除的手动时间戳琐事
手动添加时间戳通常是因为一些乏味的原因而失败,而非安全问题。
- 你忘记为重要的功能分支添加时间戳。
- 收据散落在笔记本电脑、CI 工件和各种随机文件夹中。
- 收据文件与具体提交之间没有清晰的映射关系。
- 不同的团队成员使用不同的流程,或者根本没有流程。
- 当争议真正发生时,你才发现收据从未被创建。
困难的方式是直接使用 OpenTimestamps:安装工具,手动为提交哈希添加时间戳,并自行存储收据文件。这种方法在技术上是可行的,但它是一项与真正的开发工作争夺时间的琐事。
Timestamp GIT 帮你卸下了这个负担。它是一个托管 SaaS 和 GitHub App,完全自动化并隐藏了 OpenTimestamps 协议。安装之后,它会监视你的仓库,收集提交哈希,并每晚将它们锚定到比特币区块链中。无需 CLI 工具,无需手动管理收据,无需记忆。
一次性设置:将你的仓库连接到 GitHub App
设置模式刻意设计得很简单:安装一次,连接仓库,然后就不用管了。
使用 GitHub App 的标准模式:
- 从 GitHub Marketplace 安装 Timestamp GIT GitHub App。
- 授予对你想要监控的仓库的访问权限。
- 选择证明的存储位置:同一仓库中的专用分支或单独的影子仓库。
- 完成。
安装后,GitHub App 会自动通过 webhook 开始监控新的提交。无需修改代码,无需本地配置文件,也无需在开发者机器上安装任何东西。
标准模式下的权限:
- 该应用需要对源仓库具有只读访问权限,以便读取 HEAD 提交哈希。
- 它需要对存储证明文件的目标仓库或分支具有读写访问权限。
- 它永远不会读取或存储你的实际源代码。
适用于零知识环境的企业 ZK 模式:
如果你的安全策略要求源代码绝不能离开你的基础设施,你可以使用企业 ZK 模式。一个 12 行的 GitHub Action 在你这边运行,仅将提交哈希推送到 Timestamp GIT API。在这种模式下,Timestamp GIT 完全不需要对源仓库的读取权限——只需要对存储证明的目标仓库具有读写权限。
这一区别对合规团队很重要:标准模式从 GitHub 读取提交哈希,而企业 ZK 模式仅从你的 GitHub Action 发送哈希。
自动化流水线:从提交到比特币锚定
设置完成后,流水线无需人工干预即可运行。
每晚,一个工作进程会收集当天待处理的提交哈希,并对它们进行批处理:
- 提交哈希由 GitHub App 检测到,或由你的企业 ZK Action 推送。
- 哈希在内存队列中等待,直到夜间运行。
- 午夜 cron 工作进程按仓库对待处理哈希进行分组。
- 工作进程为每个仓库创建清单文件。
- 它从每日批次构建一棵 Merkle 树。
- 它使用公共 OTS 日历创建 OpenTimestamps 证明。
- Merkle 根被锚定到比特币区块中。
然后,清单和 .ots 收据文件被推送回你的专用时间戳分支或影子仓库。
一个重要的时间说明:比特币确认需要几个小时,通常大约三小时。由于批处理在午夜运行,锚定稍后完成,证明通常会在第二天出现。这种延迟不是故障——这是比特币网络在做使时间戳不可变的工作。
你可以通过 REST API 检查最后的锚定状态:
# 最后锚定的比特币区块信息
curl -s https://timestampgit.dev/api/statusLast/acme/webapp
# 已提交/已加时间戳的提交总数
curl -s https://timestampgit.dev/api/statusCount/acme/webapp
# Shields.io 徽章使用的综合摘要
curl -s https://timestampgit.dev/api/statusSummary/acme/webapp
将 acme/webapp 替换为你的 GitHub 用户或组织名以及仓库名。
对于公开 README,你可以嵌入一个验证徽章。安装后,仓库连接页面会提供 Markdown 代码片段。一个典型的徽章如下所示:
[](https://timestampgit.dev/status/acme/webapp)
对于私有仓库,状态 URL 使用加密的 HMAC 进行保护。只有授权用户才能查看这些仓库的状态,且 HMAC 特定于服务器实例。
监控与故障处理:保持你的证明健康
自动化并不意味着忽视系统。它意味着监控结果,而不是手动执行任务。
仓库状态页面是你的主要健康仪表板。它显示:
- 证明的持久性
- 最早的锚定日期
- 每日规律性
- 比特币区块和交易数据
- 已加时间戳日期的日历热力图
- 可下载的审计 CSV
- 每个已加时间戳日期的 PDF 证书
对于程序化监控,公共 API 端点覆盖了常见情况:
# 检查最近锚定的区块
curl -s https://timestampgit.dev/api/statusLast/acme/webapp
# 统计已加时间戳的提交数量
curl -s https://timestampgit.dev/api/statusCount/acme/webapp
# 获取用于脚本或 Shields.io 的综合摘要
curl -s https://timestampgit.dev/api/statusSummary/acme/webapp
这些端点可以接入你现有的正常运行时间监控、内部仪表板或 CI 检查。例如,一个定时脚本可以每天调用一次 statusLast,并在预期的锚定日期缺失时发出警报。
常见的故障场景包括:
- 在 GitHub 中撤销了仓库访问权限。
- GitHub App 被卸载。
- GitHub 与 Timestamp GIT 服务之间的网络问题。
这些故障会在仓库状态页面上显示出来,而不是静默失败。由于提交哈希按日期分批处理,一次错过的夜间运行可以在下一次成功的批次中拾取待处理的哈希。
为了合规和记录保存,请定期下载审计 CSV 和 PDF 证书。将它们与其他知识产权文档一起存储在你的法律档案中。
自动化 Git 时间戳的最佳实践
一旦自动化就位,一些习惯将使你的在先技术记录更加可靠。
为所有仓库添加时间戳,包括私有仓库。 许多团队只为面向公众的项目添加时间戳。但专利流氓和雇佣纠纷通常针对内部系统和商业机密。私有仓库同样重要,甚至更为重要。
将证明文件排除在主源代码分支之外。 使用专用的时间戳分支或单独的影子仓库。这样可以保持 main 分支的整洁,同时为审计人员提供一个查找 .ots 收据和清单文件的单一位置。
在 README 中嵌入验证徽章。 一个可见的徽章告诉潜在的侵权者,你的提交历史已锚定在比特币中。它不仅仅是装饰;它是一种低成本的威慑。
在源代码必须保留在内部的情况下使用企业 ZK 模式。 如果你的合规团队禁止第三方对源仓库的读取访问,GitHub Action 方法仅将提交哈希发送到 Timestamp GIT API。
对于隔离或自托管环境,使用 Docker 镜像。 Timestamp GIT 以 Docker 镜像的形式提供,以便完全控制:
services:
timestampgit:
image: rue1401/timestampgit:prod
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
valkey:
image: valkey/valkey:8
restart: unless-stopped
使用以下命令启动:
docker compose pull
docker compose up -d
docker compose logs -f timestampgit
应用程序将在 http://localhost:8080 上可用。首次启动时,设置向导会引导你连接 GitHub App 并配置实例。Docker 许可证页面提供限时演示许可证。
定期下载审计报告。 不要等到法律纠纷发生才开始收集证据。每季度或每月导出一次只需几分钟,就能为你提供一个离线存档。
常见问题
GitHub App 如何自动为我的提交添加时间戳?
安装后,Timestamp GIT GitHub App 通过 webhook 监控你的仓库中的新提交。每晚,它收集当天所有的提交哈希,创建一棵 Merkle 树,并使用 OpenTimestamps 协议将根锚定到比特币区块链中。然后证明会自动推送回你的仓库。无需手动步骤。
GitHub App 能访问我的源代码吗?
在标准模式下,该应用需要对源仓库的只读访问权限以读取提交哈希,但它永远不会读取或存储你的实际源代码。为了最大程度的隐私保护,企业 ZK 模式使用一个 GitHub Action,仅将提交哈希推送到 Timestamp GIT API,因此你的源代码永远不会离开你的环境。
我可以在私有仓库中使用 Timestamp GIT 吗?
可以。Pro 和 Enterprise 计划支持私有仓库。该应用可以将证明存储在影子仓库或专用分支中,并且私有仓库的状态端点访问受 HMAC 保护。
如何验证我的提交已被添加时间戳?
你可以通过公共状态仪表板、API 端点(如 /api/statusLast)进行验证,或者下载 .ots 收据并使用标准的 OpenTimestamps 验证工具对照比特币区块链进行验证。验证是独立的,不依赖于 Timestamp GIT 的服务器。
结论:设置好就不用管了
自动化的 Git 时间戳将问题从“我是否记得为这个提交添加时间戳?”转变为“夜间锚定是否出现在我的仪表板中?”
Timestamp GIT 在幕后处理整个 OpenTimestamps 协议。你只需安装一次 GitHub App,连接你的仓库,然后让夜间流水线将提交哈希锚定到比特币中。其结果是不可变的、可供法庭使用的在先技术证据,而无需养成新的手动习惯。
从公共仓库的免费计划开始,对于私有仓库升级到 Pro Agency,或者在源代码必须保留在基础设施内部时使用 Enterprise ZK。自托管用户可以通过部署 Docker 镜像来获得完全控制。
立即在 Timestamp GIT 安装 GitHub App,让时间戳成为你的仓库自动完成的事情。