9

如何判断给定时间 git 存储库中存在什么版本?

假设我有一个共享存储库,多个用户可以将更改推送到其中,并且我想在过去某一天的 12:00 冻结快照。

如果有人在 11:30 进行本地提交,但仅在 12:30 将其推送到中央存储库,我可以稍后检测到吗?

我是否可以检测到是否有人在 12:00 之后采取行动修改了本地提交以记录提交日期为 11:30,然后将其推送到上游?

4

3 回答 3

10

Git 本身不会跟踪此信息,但我能够查看服务器本身 git 存储库中“objects”目录中提交对象文件的文件创建时间戳。

于 2012-06-14T10:20:46.987 回答
2

你可以使用一个钩子,可能是post-receive 钩子来自己存储所需的信息,或者简单地启用 reflog(它在裸存储库中默认禁用)。reflog 会自动跟踪分支的本地历史记录,例如。git reflog -1 --format=%H master@{12:00}会告诉你主裁判在 12:00 指向什么提交。

注意 reflog 过期了,你可以通过gc.reflogexpire配置过期时间。

于 2012-06-13T13:29:14.853 回答
1

git当事物被推入存储库(或为此而获取)时不会记录,只有提交本身的两个时间戳,所以我认为没有一种可靠的方法可以做到这一点,而无需编写可以在某处存储额外元数据的钩子您,或依赖 git-daemon、ssh 或您的 http 服务器完成的日志记录,具体取决于用于推送/获取的方法。

于 2012-06-13T13:59:47.660 回答